任务 VS在C#异步委托?(Task vs Asynchronous delegates

2019-08-03 12:37发布

我有这个简单的方法:

static int Work (string s) { return s.Length; }

我可以运行它:

Task<string> task = Task.Factory.StartNew<int> (() => Work ("lalala") );
...
int result = task.Result;

或与此:

Func<string, int> method = Work;
IAsyncResult myIasync= method.BeginInvoke ("lalala", null, null);
...
int result = method.EndInvoke (myIasync);
  • 它们都使用线程池线程。
  • 无论等待执行完成(读取值时)
  • 双方再次引发任何异常给调用者。

当我应该使用的呢?

Answer 1:

第二种形式,使用IAsyncResult ,是显著年龄大了,更强大。 Task<T>在.NET 4被引入,并且现在是表示异步操作的优选方式。 这是更易于使用,特别是在C#5,支持“异步函数”在那里你可以等待在非阻塞方式的任务(或其他异步操作)。

使用Task ,而不是调用的BeginInvoke可能不会改变太多关于操作本身是如何被执行(尽管它可以让你在调度等方面更多的选择),但它使从代码的这要“角度上的巨大差异看”的经营,使用的结果,等待多个任务,处理故障等。

如果你都不可能使用C#5(或者使用.NET 4.5,或.NET 4中加上异步针对包)它将使你的生活相当容易,当它涉及到管理异步操作。 这是前进的道路:)



Answer 2:

任务更优雅,并且最近推出(.NET 4),所以如果符合您的需求,我会与去。



文章来源: Task vs Asynchronous delegates in c#?