簡體   English   中英

C#DataFlow:等待ConcurrentExclusiveSchedulerPair啟動的所有任務完成

[英]C# DataFlow: Wait for all tasks started by ConcurrentExclusiveSchedulerPair to finish

我有一個要執行的操作列表,可以在用戶交互時取消。 很簡單,但是ConcurrentExclusiveSchedulerPair .Completion 。完成從未完成。 這是一個例子:

static void Main(string[] args)
{
    var taskSchedulerPair = new ConcurrentExclusiveSchedulerPair();
    var cts = new CancellationTokenSource();
    var optiions = new ExecutionDataflowBlockOptions
    {
        TaskScheduler = taskSchedulerPair.ConcurrentScheduler,
        CancellationToken = cts.Token,
        MaxDegreeOfParallelism = 5
    };
    var a1 = new ActionBlock<int>(new Func<int, Task<int>>(Moo), optiions);
    for (var i = 0; i < 20; i++) a1.Post(i);
    Console.WriteLine("Press any key to cancel...");
    Console.ReadKey(false);
    Console.WriteLine("Cancelling...");
    cts.Cancel();
    // taskSchedulerPair.Complete();
    taskSchedulerPair.Completion.Wait();
    // This never prints
    Console.WriteLine("Done.");
    Console.ReadKey(false);
}

public static async Task<int> Moo(int ms)
{
    Console.WriteLine("Starting: " + ms);
    await Task.Delay(4000);
    Console.WriteLine("Ending" + ms);
    return ms + 100;
}

來自文檔

調用完成是可選的。 僅當您依賴Completion屬性通知所有處理已完成時,才有必要

因此,如果要在Completion屬性上Wait ,則必須在調度程序上調用Complete() 對於數據流塊,此行為相同。 依賴於Completion屬性,你必須在塊上調用Complete()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM