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 メソッドがあります。

私の質問は、Silverlight で StartNew メソッドを Task.Run の代替として使用できますか? 私が知っておくべきことはありますか?

4

1 に答える 1

2

編集

@svick のメモによると、このブログにはこのトピックに関する議論があります。そこに記載されている重要な点は、Task.Run(someAction)次と同等です。

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

それらの機能は、「スレッドプールで実行するためにこのアクションをスケジュールする」という、私が考えることができるあらゆる目的で同一のように見えます。

Task.Run (.Net):

ThreadPool で実行する指定された作業をキューに入れ、その作業のタスク ハンドルを返します。

TaskFactory.StartNew (シルバーライト):

Task を開始し、現在の TaskScheduler に実行するようにスケジュールします。

したがって、後者はTaskSchedulerを使用するという点で少し異なって聞こえますが、デフォルトでは、スケジューラもスレッド プールのみを使用します。

Task Parallel Library と PLINQ の既定のスケジューラは、.NET Framework ThreadPool を使用して作業をキューに入れ、実行します。

于 2013-11-01T02:07:51.707 に答える