1

我正在将 .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 方法。

我的问题是,我可以使用 StartNew 方法作为 Silverlight 中的 Task.Run 替代方法吗?有什么我应该注意的吗?

4

1 回答 1

2

编辑

根据@svick 的注释,这个博客讨论了这个确切的主题。那里提到的关键点Task.Run(someAction)相当于:

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

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

任务运行(.Net):

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

TaskFactory.StartNew (Silverlight):

启动 Task,将其调度到当前 TaskScheduler 执行。

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

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

于 2013-11-01T02:07:51.707 回答