从QueueUserWorkItem移动到Task

时间:2013-10-21 17:16:40

标签: c# task-parallel-library task

.NET 4.5和VS2012是我的目标

在我的C#中,我有很多旧代码:

var stuff;
ThreadPool.QueueUserWorkItem(() =>
    {
          stuff=GetStuff():
           InvokeOnMainThread(stuff);
    });

如何使用C#中的新任务系统完成这项工作?

1 个答案:

答案 0 :(得分:4)

这通常会映射到:

Task.Factory.StartNew(() =>
{
     return GetStuff():                  
}).ContinueWith(t =>
{
    // InvokeOnMainThread(t.Result); // Note that this doesn't need to "Invoke" now
    UseStuff(t.Result); 
}, TaskScheduler.FromCurrentSynchronizationContext()); // Moves to main thread

如果您使用的是Visual Studio 2012和.NET 4.5,您还可以选择标记方法async,然后执行:

var stuff = await Task.Run(() => GetStuff());
UseStuff(stuff); // Will be on the main thread here...