我有一个异步方法可以做一些特殊的事情(至少看起来像我一样):
public async ReturnType MethodNameHere()
{
var result = await DoSomethingAsync(); // this could take a while (dozens of seconds)!
// no other processing after awaiting the result of the asynchronous task
return result;
}
此方法由另一个方法使用,如下所示(意味着在无限循环中运行):
private async void ProcessSomething()
{
// some console printing
var returnType = await MethodNameHere();
// do some _actual_ work here, process stuff, etc
ProcessSomething(); // call the same method again
}
现在,此任务通过Task.Factory.StartNew(ProcessSomething, TaskCreationOptions.LongRunning)
运行,该任务与执行类似工作的其他任务一起与Task.Factory.ContinueWhenAll
合并。
问题
假设如果调度程序最终将每个任务放在彼此相同的线程上,这些任务是否会相互阻塞,这是正确的吗?
如果是这种情况,如果要运行DoSomething
的异步版本,那么甚至还有任何的好处吗?#34;单独"在Task
?
答案 0 :(得分:2)
如果您想在异步操作完成之前完成一些工作,只需在await
返回Task
之前完成这项工作。
但是,异步操作的主要目的是避免在等待非阻塞操作时使用线程。