多线程:Task.Run调用中async关键字的用途

时间:2018-12-17 01:01:44

标签: c# multithreading

有人可以让我知道我们何时在以下两个实现中将一个与另一个结合使用:

  1. await Task.Run(async () => Method());

  2. await Task.Run(() => Method());

async调用中使用Task.Run()的目的是什么?

2 个答案:

答案 0 :(得分:2)

没有真正的理由使用#1。使用Task.Run的目的是使一个长时间运行的任务或I / O密集型工作单元变得异步,并且由于#1已经是异步的,因此Task.Run内部的异步匿名函数是多余和不必要的。

您可以执行以下操作将工作单元转换为异步:

await Task.Run(() => Method());
public void Method() 
{ 
    //doing intensive work here
}

或者您只是await已经异步的工作单元。

await MethodAsync();
public async Task MethodAsync()
{
    //doing async work here
}

答案 1 :(得分:-4)

如果您调用的方法是异步的,则可以在函数中使用async / await。

async Task MainAsync()
{
   await Task.Run(async () => await MethodAsync());
   await Task.Run(() => Method());
}
async Task MethodAsync() { ... }
void Method() { ... }