2016-09-19 161 views
-1

我研究任務並得到一點問題 是否可以使用for循環運行和停止任務? 這裏是我的代碼示例:從循環開始任務,並在循環結束時完成

 static void Main(string[] args) 
    { 
     for (int i = 0; i>=5; i++) 
     { 
      Task myTask = Task.Factory.StartNew(() => TestTask()); 
      myTask.Wait(); 
      if (myTask.IsCompleted) 
      { 
       Console.WriteLine("Task was complete"); 
      } 
      else 
      { 
       Console.WriteLine(myTask.Status); 
      } 
     } 
     Console.ReadKey(); 
    } 
    private static void TestTask() 
    { 
     Console.WriteLine("Add number"); 
    } 
+2

你在哪裏停下來?或者你想讓它們平行運行? –

+3

你究竟想要做什麼?你似乎永遠不會等待任務完成 –

+0

Yeap抱歉複製了代碼而沒有等待,但仍然即使我使用等待它仍然未打印已經編輯過的任務中的文本。 – Harardin

回答

0

這就是例子是多麼容易取消任務與任何類型的迭代

static CancellationTokenSource cts; 
    static void Main(string[] args) 
    { 
     cts = new CancellationTokenSource(); 
     Task.Factory.StartNew(test); 
    } 

    private async static void test() 
    { 

     await function(cts.Token); 

    } 

    static async Task function(CancellationToken ct) 
    { 
     try 
     { 
      while (!ct.IsCancellationRequested) 
      { 
       //start a loop 
       Thread.Sleep(1000); 
       //task done 
       cts.Cancel(); 
       //cancel the loop 
      } 
     } 
     catch { } 
    }