【问题标题】:Block Task.Run method until done阻止 Task.Run 方法直到完成
【发布时间】:2015-01-31 00:17:12
【问题描述】:

我有一些需要运行的方法,其中一个应该作为不同的线程运行,因此我使用带有 lambda 的 Task.Run,​​但我希望在 Task 完成后立即启动下一个方法。

例如我希望LastJob() 将在MoreWork() 完成后启动:

public void DoSomeWork()
{
    Task.Run(() => MoreWork());
    LastJob();
}

【问题讨论】:

  • 您可以阅读TaskContinueWith 方法,甚至更好——关键字asyncawait。很棒的视频here

标签: c# multithreading task


【解决方案1】:

您可以使用asyncawait 关键字 link

public async void DoSomeWork()
{
    await Task.Run(() => MoreWork());
    LastJob();
}

【讨论】:

  • 使用async Task,而不是void
  • 没问题。 Ant P void 有什么问题?无论如何它都会等待
  • @Sag1v,异常处理。 async void 基本上吞下了所有异常。
  • 好吧,问题是如何等待 :) jasnet 在我发布的那个链接中,您可以看到 Task 示例等等......
【解决方案2】:

Coy 可以使用ContinueWith 方法,如下所示:

public void DoSomeWork()
{
    var task = Task.Run(() => MoreWork());
    task.ContinueWith(() => LastJob()) ;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多