在独立任务中使用异步方法
本文关键字:异步方法 独立 任务 | 更新日期: 2023-09-27 17:56:38
我有一个异步方法可以做一些奇怪的事情(至少对我来说看起来很奇怪):
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
要在Task
中"单独"运行,调用异步版本有什么好处吗?
如果要
在异步操作完成之前执行一些工作,只需在await
返回的Task
之前执行该工作即可。
但是,异步操作的主要目的是避免在等待非阻塞操作时消耗线程。