2017-09-27 107 views
0

我正在用Visual Studio编写C#代码。我有如下所示的异步任务方法等待一个任务返回函数:任务异步c#编程

我写DoSomething()方法的两个可能的实施方式(下面提供)。这两种实现有什么区别?每个人的优点和/或缺点是什么?

Task DoSomething() 
{ 
    return Task.Run(() => { // Some code }); 
} 

async Task DoSomething() 
{ 
    // Some code 
} 

预先感谢您!

+0

[Task Class](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v = vs.110).aspx) [Task.Run Method(Action)] (https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx) 我会推荐阅读[C#5中的异步。 0](http://shop.oreilly.com/product/0636920026532.do) – rmjoia

+0

[C#中“返回await”的目的是什么?](https://stackoverflow.com/questions/19098143/)什么是返回等待在c) – Console

+1

可能重复[调用异步方法和Task.Run异步方法之间的区别](https://stackoverflow.com/questions/31958146/差异之间调用异步方法和任务运行异步方法) –

回答

1

async确实意味着您将在您的方法中使用await。如果你没有这样做的计划,那么你可以返回任务没有async关键字。

在任何情况下,您都可以在呼叫方法上等待。

但是在第二种情况下你很难做出正确回答的问题还不清楚。

+0

还值得一提的是,多个'await's将创建多个状态机(幕后),同时返回'任务'不会。可能是性能方面的考虑因素。 –

0

选项1用于背景中的CPU绑定工作。

选项2用于异步工作,即涉及其他Task返回方法。

0

async关键字将能在你们使用await关键字在你的代码给其他await任务(见async/await

Task.Run(...)将安排您的代码从线程池线程执行(见Task.Run Method