Task.Run等效于silverlight

时间:2013-11-01 01:16:09

标签: silverlight async-await

我正在将.net移植到Silverlight,我在.net

中有这个
    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替代方案吗?有什么我应该知道的吗?

1 个答案:

答案 0 :(得分:2)

修改

Per @svick的注释,this blog讨论了这个确切的主题。提到的关键点是Task.Run(someAction)等同于:

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

他们的函数看起来是相同的,出于我能想到的任何目的:“安排此操作在线程池上执行”。

Task.Run(。Net):

  

将指定的工作排队到ThreadPool上运行并返回该工作的任务句柄。

TaskFactory.StartNew(Silverlight):

  

启动任务,将其安排执行到当前的TaskScheduler。

所以后者听起来略有不同,因为它使用TaskScheduler,但默认情况下,调度程序也只使用线程池:

  

任务并行库和PLINQ的默认调度程序使用.NET Framework ThreadPool来排队和执行工作。