我正在将.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替代方案吗?有什么我应该知道的吗?
答案 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来排队和执行工作。