11 .net c# multithreading .net-4.0
我有这个简单的方法:
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);
我应该何时使用?
Jon*_*eet 18
使用的第二种形式IAsyncResult显着更老,功能更强大.Task<T>是在.NET 4中引入的,现在是表示异步操作的首选方式.它使用起来要简单得多,特别是在支持"异步函数"的C#5中,您可以以非阻塞方式等待任务(或其他异步操作).
使用a Task而不是调用BeginInvoke可能不会改变操作本身的执行方式(尽管它在调度等方面为您提供了更多选项),但是从想要"观察"的代码的角度来看,它有很大的不同.操作,使用结果,等待多个任务,处理故障等.
如果您可以使用C#5(使用.NET 4.5,或使用.NET 4加上异步目标包),那么在管理异步操作时,它将使您的生活变得更加轻松.这是前进的方式:)
| 归档时间: | 
 | 
| 查看次数: | 6351 次 | 
| 最近记录: |