2012-11-20 28 views
2
啓動任務

你好,我是新來的多線程和任務在C#.NET從唯一的幫助我成功啓動一個新的任務taht可以繼續運行inbackground使用:無法關閉由Task.Factory.StartNew

//if(tsk =NotRunning){ 
tsk = Task.Factory.StartNew(TheMethod); 

它現在工作正常,但現在當它的開始無法阻止它現在,我一直在尋找msdn,並發現了幾個方法,似乎在做這項工作像Dispose買他們不這樣做,所以我想要知道兩件事:

  • 我如何檢查此任務是否已在運行? (這是一個MVC項目,任務是由控制器調用…/Task/Start啓動的,所以我不想在每次訪問此URL時都繼續啓動另一個任務實例我只希望在整個應用程序中運行它的一個實例在後臺運行)

  • 其次我該如何阻止它不是,我嘗試以下,但沒有奏效:

    public void TaskClose() 
    { 
        tsk.Dispose(); 
        var st = tsk.Status.ToString(); 
    } 
    

我知道有可能是把它在互聯網上公佈幾個答案,但他們大多使用Lambda的表達和我不是很排練的我非常樂意以其他方式提供答案,我甚至會意識到你可以指出我可以用來完成我的結果的名稱methodproperty

謝謝。

+1

建議學習lambda表達式語法和單獨的線程(都是合理先進的概念),然後當你確定你已經釘住了它們,結合這兩個想法。 – tomfanning

+0

是的,我猜所以我已經開始,但我的其他quesry仍remian回答我如何檢查是任務已在運行或不? – Maven

+0

最終,你原來的問題的答案是「你不能」,這就是爲什麼我建議開始慢一點。 – tomfanning

回答

3

您無法停止TPL任務。處理這個問題的正確方法是實現cancellation tokens

+0

Thankyou,但我可能聽起來很愚蠢,但是如果沒有'Lambda表達式'就不可能做到這一點,我對它不熟悉,因此無法真正掌握髮生了什麼,那些例子也在使用那個和其他許多? :/ – Maven

+0

而我該如何檢查該任務是否已在運行? – Maven

+1

@Maven任務有一個'IsCompleted'屬性。 – Servy