簡體   English   中英

動態創建任務並等待完成(C#)

[英]Creating Tasks dynamically and wait for completion (C#)

在我的C#項目中,我必須打開一堆圖像。

假設我們需要打開50個。我的計划是創建10個任務,做一些事情,然后等待每個任務完成,然后再創建下10個任務。

var fd = new OpenFileDialog
{
    Multiselect = true,
    Title = "Open Image",
    Filter = "Image|*.jpg"
};

using (fd)
{
    if (fd.ShowDialog() == DialogResult.OK)
    {
       int i = 1;                
       foreach (String file in fd.FileNames)
       { 
           if (i <= 10) {
               i++;
               Console.WriteLine(i + ";" + file);
               Task task = new Task(() =>
               {
                   // do some stuff
               });
               task.Start();
           } 
           else
           {
               Task.WaitAll();
               i = 1;
           } 
       }  
    }
}
Console.WriteLine("Wait for Tasks");
Task.WaitAll();
Console.WriteLine("Waited);

i=10時,代碼不等待,最后也沒有等待。 有誰知道如何解決它?

Task.WaitAll期望Task數組等待,您從不傳遞任何內容。以下更改將等待您啟動的所有任務。

List<Task> tasksToWait = new List<Task>();
foreach (String file in fd.FileNames)
{ 
   if (i <= 10) {
       i++;
       Console.WriteLine(i + ";" + file);
       Task task = new Task(() =>
       {
           // do some stuff
       });
       task.Start();
       tasksToWait.Add(task);
   } 
   else
   {
       Task.WaitAll(tasksToWait.ToArray());
       tasksToWait.Clear();
       i = 1;
   } 
} 

這是上面代碼中的代碼片段,已更改


注意此答案不包含對您選擇的設計及其可能存在的陷阱的批評。

暫無
暫無

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

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