在隔离任务中使用异步方法

时间:2014-04-04 20:57:53

标签: c# .net asynchronous .net-4.5

我有一个异步方法可以做一些特殊的事情(至少看起来像我一样):

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

1 个答案:

答案 0 :(得分:2)

如果您想在异步操作完成之前完成一些工作,只需在await返回Task之前完成这项工作。

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