2013-11-01 60 views
1

我移植到.NET Silverlight和我有這個在.NETTask.Run相當於在Silverlight

public void OnCompleted(Action continuation) 
    { 
     if (Continuation == Sentinel || 
      Interlocked.CompareExchange(
       ref Continuation, continuation, null) == Sentinel) 
     { 
      //original code in .net 
      //Task.Run(continuation); 

      //can i use this as Task.Run alternative in silverlight? 
      Task.Factory.StartNew(continuation); 
     } 
    } 

的Silverlight可是沒有Task.Run。查看msdn

Run方法是StartNew方法的一種更簡單的替代方法。

幸運的是,Silverlight確實有StartNew方法。

我的問題是,我可以在Silverlight中使用StartNew方法作爲Task.Run替代方案嗎?有什麼我應該知道的?

回答

2

編輯

每@ svick的筆記,this blog有這個確切話題的討論。關鍵的一點提到存在着Task.Run(someAction)等同於:

Task.Factory.StartNew(someAction, 
    CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); 

它們的功能看起來是相同的,對於任何目的,我能想到的:「賽程行動線程池的執行」。

Task.Run(.NET):

隊列指定的工作對線程池運行和返回任務句柄的工作。

TaskFactory.StartNew(Silverlight的):

啓動任務,調度它執行到當前的TaskScheduler。

所以後者的聲音略有不同,因爲它採用的是TaskScheduler,但默認情況下的調度也只是使用線程池:

的任務並行庫和PLINQ的默認調度使用。 .NET Framework ThreadPool排隊並執行工作。

+2

'Task.Run()'也使用調度器。不同之處在於'StartNew()'使用'TaskScheduler.Current',而'Run()'使用'TaskScheduler.Default'。另外,'Run()'對於異步方法有重載,'StartNew()'不會。有關更多詳細信息,請參閱[* Task.Run vs Task.Factory.StartNew *](http://blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx)。 – svick