在独立任务中使用异步方法

本文关键字:异步方法 独立 任务 | 更新日期: 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之前执行该工作即可。

但是,异步操作的主要目的是避免在等待非阻塞操作时消耗线程。