【发布时间】:2022-07-06 22:34:30
【问题描述】:
我有一个异步函数,它调用一个慢速同步函数(返回一个布尔值)。我想从任务/线程中调用慢速同步函数并让异步函数等待其完成。如何才能最简单/优雅地做到这一点?
(总而言之,您可以说我正在尝试等待一个同步函数,如果不将其调用放在任务/线程中,这当然无法完成。)
我目前所拥有的,我认为应该可以做得更好:
public async void AsyncFunction()
{
var task = Task.Factory.StartNew(() => SlowFunction());
await task;
var retVal = task.Result;
}
【问题讨论】:
-
await Task.Run?不确定我是否理解问题,请说明您尝试过的内容以及您自己的尝试没有奏效的地方 -
await Task.Run很少是正确的选择,除非您知道您当前处于 UI 线程之类的东西上并且您正试图将处理转移到其他地方。Task.Run== "请找一些其他线程来运行这段代码"。await== “在该任务完成之前,该线程没有任何用处”——当前线程可以很容易地成为“其他线程”并直接运行代码。 -
没有理由这样做。如果您无论如何都必须等待其他任务,那么额外的线程是没有意义的。把它放在一个单独的线程中并不会让它运行得更快。
标签: c#