【问题标题】:Awaiting a non-async method等待非异步方法
【发布时间】:2013-09-16 22:26:41
【问题描述】:

我对 C# 中的整个 await / async 模式感到非常困惑。

我有一个表单应用程序,我想调用一个需要 20 秒才能完成大量处理的方法。因此我想await它。我认为正确的方法是将其标记为async Task,但这样做会产生警告,因为我没有在其中的任何地方使用await

谷歌透露了一些关于返回 TaskCompletionSource<T> 的信息,但我没有返回类型,因为它是无效的。

如何使用await 调用此方法?

【问题讨论】:

标签: c# task-parallel-library


【解决方案1】:

如下调用你的方法:

await Task.Run(() => YourMethod());

当您使用 Task.Run 方法时,它会为您创建一个等待任务。

【讨论】:

  • Task.Run 是在主 UI 线程上运行“YourMethod”,还是创建一个新线程? (例如 WinForms)
  • @harag 稍加研究就会得出结论(实际上来自 MSDN)Task.RunQueues the specified work to run on the thread pool and returns a Task object that represents that work. 所以答案是最有可能(我相信它肯定适用于 WinForms)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多