Task.RunSynchronouslyとは何ですか?

から有効

どうすればいいのかしら?どのようなシナリオでこの方法を使用できますか。

私の最初の考えはRunSynchronously、非同期メソッドを呼び出して、そのようなデッドロックの問題を引き起こすことなく同期的に実行すること.wait()です。

ただし、MSDNによると

通常、タスクはスレッドプールスレッドで非同期に実行され、呼び出し元のスレッドをブロックしません。RunSynchronously()メソッドを呼び出すことによって実行されるタスクは、現在のTaskSchedulerに関連付けられ、呼び出し元のスレッドで実行されます。ターゲットスケジューラが呼び出しスレッドでのこのタスクの実行をサポートしていない場合、タスクはスケジュールどおりに実行されるようにスケジュールされ、呼び出しスレッドはタスクの実行が完了するまでブロックされます。

タスクが呼び出し元のスレッドで実行される場合、なぜここにTaskSchedulerが必要なのですか?

ステファノ・ダントニオ

RunSynchronously タスクをいつ開始するかの決定を現在のタスクスケジューラ(または引数として渡されたもの)に委任します。

なぜそこにあるのか(おそらく内部またはレガシーで使用するため)はわかりませんが、現在のバージョンの.NETで役立つユースケースを考えるのは難しいです@Fabjanは、質問に対する彼のコメントで考えられる説明をしています。

RunSynchronously スケジューラーに同期的に実行するように要求しますが、スケジューラーはヒントを無視してスレッドプールスレッドで実行することができ、現在のスレッドは完了するまで同期的にブロックします。

スケジューラーは、現在のスレッドで実行する必要はなく、すぐに実行する必要もありませんが、一般的なスケジューラー(ThreadPoolTask​​Schedulerおよび一般的なUIスケジューラー)で発生すると思います。

RunSynchronously タスクがすでに開始されているか、完了/障害が発生した場合にも例外がスローされます(これは、非同期メソッドでタスクを使用できないことを意味します)。

このコードは、さまざまな動作を明確にする場合があります。

WaitそしてResultすべてのタスクを実行しない、彼らは現在のスレッドのタスクの完了を待って、我々は比較したい場合は、私たちが比較できるように完了するまで、それをブロックStartしてWaitRunSynchronously

class Scheduler : TaskScheduler
{
    protected override void QueueTask(Task task) => 
        Console.WriteLine("QueueTask");

    protected override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued)
    {
        Console.WriteLine("TryExecuteTaskInline");

        return false;
    }

    protected override IEnumerable<Task> GetScheduledTasks() => throw new NotImplementedException();
}

static class Program
{
    static void Main()
    {
        var taskToStart = new Task(() => { });
        var taskToRunSynchronously = new Task(() => { });

        taskToStart.Start(new Scheduler());
        taskToRunSynchronously.RunSynchronously(new Scheduler());
    }
}

StartまたはRunSynchronouslyコードを実行してコメントStartしようとすると、タスクをスケジューラーにキューに入れようとしますが、RunSynchronouslyインラインで実行しようとします。失敗した場合(falseを返す)、キューに入れられます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Task.RunSynchronouslyとは何ですか?

分類Dev

待機していないTask.RunとTask.RunSynchronouslyの違いは何ですか

分類Dev

Task.RunとTask.Factory.StartNewの違いは何ですか

分類Dev

Task.Run()とawait Task.Run()の違いは何ですか?

分類Dev

SBTのDef.taskと.taskValueとは何ですか?

分類Dev

Task.CompletedTaskに相当するValueTaskとは何ですか?

分類Dev

loop.create_task、asyncio.async / ensure_futureとTaskの違いは何ですか?

分類Dev

Task with asyncの用途は何ですか?

分類Dev

「apt-cacheshowpackage_name」の出力の「Task」とは何ですか?

分類Dev

Spring Cloud StreamとSpring Cloud Taskの違いは何ですか?

分類Dev

packaged_taskとasyncの違いは何ですか

分類Dev

Task.Start / WaitとAsync / Awaitの違いは何ですか?

分類Dev

Task.Run(Foo)とFooAsync()の違いは何ですか?

分類Dev

「apt-cacheshowpackage_name」の出力の「Task」とは何ですか?

分類Dev

Task.Factory.StartNewとnewThread()。Start()の違いは何ですか?

分類Dev

concurrency :: task :: thenのargタイプとは何ですか?

分類Dev

androidnoHistoryとandroidFLAG_ACTIVITY_CLEAR_TASKの違いは何ですか

分類Dev

C#でのFoo()。ResultとTask.Run(()=> Foo())。Resultの違いは何ですか?

分類Dev

task_structのnivcswおよびnvcswフィールドとは何ですか?

分類Dev

Visual Studio Codeのlaunch.jsonとtask.jsonの違いは何ですか?

分類Dev

TaskとTask <T>は交換可能ですか?

分類Dev

voidを返すこととTaskを返すことの違いは何ですか?

分類Dev

Task <bool>を返すこととboolを返すことの違いは何ですか

分類Dev

C#でのTask.FromResult <TResult>の用途は何ですか

分類Dev

Task.Delay(-1)に相当するF#は何ですか?

分類Dev

CancellationTokenをパラメーターとしてTask.Runに渡すことの利点は何ですか?

分類Dev

Task.FromResult()とTask.Run()

分類Dev

1つのファイルに影響するコード修正でTask <Solution>よりもTask <Document>を返すことの利点は何ですか

分類Dev

Task.FromResultを待つことは何か利益をもたらしますか?

Related 関連記事

  1. 1

    Task.RunSynchronouslyとは何ですか?

  2. 2

    待機していないTask.RunとTask.RunSynchronouslyの違いは何ですか

  3. 3

    Task.RunとTask.Factory.StartNewの違いは何ですか

  4. 4

    Task.Run()とawait Task.Run()の違いは何ですか?

  5. 5

    SBTのDef.taskと.taskValueとは何ですか?

  6. 6

    Task.CompletedTaskに相当するValueTaskとは何ですか?

  7. 7

    loop.create_task、asyncio.async / ensure_futureとTaskの違いは何ですか?

  8. 8

    Task with asyncの用途は何ですか?

  9. 9

    「apt-cacheshowpackage_name」の出力の「Task」とは何ですか?

  10. 10

    Spring Cloud StreamとSpring Cloud Taskの違いは何ですか?

  11. 11

    packaged_taskとasyncの違いは何ですか

  12. 12

    Task.Start / WaitとAsync / Awaitの違いは何ですか?

  13. 13

    Task.Run(Foo)とFooAsync()の違いは何ですか?

  14. 14

    「apt-cacheshowpackage_name」の出力の「Task」とは何ですか?

  15. 15

    Task.Factory.StartNewとnewThread()。Start()の違いは何ですか?

  16. 16

    concurrency :: task :: thenのargタイプとは何ですか?

  17. 17

    androidnoHistoryとandroidFLAG_ACTIVITY_CLEAR_TASKの違いは何ですか

  18. 18

    C#でのFoo()。ResultとTask.Run(()=> Foo())。Resultの違いは何ですか?

  19. 19

    task_structのnivcswおよびnvcswフィールドとは何ですか?

  20. 20

    Visual Studio Codeのlaunch.jsonとtask.jsonの違いは何ですか?

  21. 21

    TaskとTask <T>は交換可能ですか?

  22. 22

    voidを返すこととTaskを返すことの違いは何ですか?

  23. 23

    Task <bool>を返すこととboolを返すことの違いは何ですか

  24. 24

    C#でのTask.FromResult <TResult>の用途は何ですか

  25. 25

    Task.Delay(-1)に相当するF#は何ですか?

  26. 26

    CancellationTokenをパラメーターとしてTask.Runに渡すことの利点は何ですか?

  27. 27

    Task.FromResult()とTask.Run()

  28. 28

    1つのファイルに影響するコード修正でTask <Solution>よりもTask <Document>を返すことの利点は何ですか

  29. 29

    Task.FromResultを待つことは何か利益をもたらしますか?

ホットタグ

アーカイブ