[英]AsAsyncAction VS Task.Run
每当我必须开始并行任务时,我通常都会这样做:
public async Task FindPerson(string personId)
{
await Task.Run(() =>
{
//Search the person and write to screen
});
}
但是通常我会看到其他使用AsAsyncOperation的编码器:
public IAsyncAction FindPerson(string personId)
{
Task t = new Task(() =>
{
//Search the person and write to screen
});
t.Start();
return t.AsAsyncAction();
}
有没有人知道与使用全新的异步/等待相比,AsAsyncAction带来了什么好处 ?
AsAsyncAction
用于将任务转换为IAsyncAction
,以传递给WinRT。 如果您不使用WinRT,则没有理由使用此扩展。
您也不应创建任务然后再启动它。 在几乎所有情况下,都首选Task.Run
。
您也不应该创建异步方法来仅使用Task.Run
在其中。 调用者希望此方法是异步的,但它所做的只是将同步工作卸载到ThreadPool
。 如果调用者需要在ThreadPool
上工作,最好让他们在代码中使用Task.Run
。
所以基本上就是这样做:
public void FindPerson(string personId)
{
// Search the person and write to screen
}
并让调用者同步地或在ThreadPool
线程上调用此方法:
Task.Run(() => FindPerson(personId));
如果您查看MSDN页面,您将看到IAsyncAction
如果将此与“任务”进行比较,您将看到
这会立即告诉您IAsyncAction是专为WinRT创建的,这是MS在移动应用程序框架上的首次真正尝试,因为完整的.net框架功能强大,无法在移动设备上安全,因此他们创建了并行缩减框架,从而使之成为现实。编写可能损坏设备的恶意软件要困难得多
因此,如果您使用的是WinRT,则在其他任务中首选返回IAsyncAction
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.