簡體   English   中英

任務開始運行需要幾秒鍾的時間

[英]It takes more than a few seconds for a task to start running

我正在使用WPFC#開發應用程序。 我有以下代碼:

        var tokenSource = new CancellationTokenSource();
        CancellationToken token = tokenSource.Token;
        Task task = Task.Factory.StartNew(() =>
        {
            // Some action that returns a boolean - **CODE_A**
        }).ContinueWith((task2) =>
        {
                result= task2.Result;
                if (!result)
                {
                    //Another action **CODE_B**
                }
            });

        }, token);

通常, CODE_A立即開始運行,然后不到一秒鍾, CODE_B開始執行。

但是,有時使用Task.Factory.StartNew創建的任務需要5秒鍾以上的時間才能開始執行(一旦開始執行,照常執行即可)。

我不明白為什么任務要花這么長時間才能開始運行? 我能以某種方式影響任務優先級,以便它在所有情況下立即開始運行嗎? 我猜(僅是一個假設)任務由任務調度程序調度以在以后執行? 有沒有辦法讓我強制任務始終一直運行?

任務是在線程池上調度的(默認情況下)。 如果還有許多其他任務/線程池使用情況(尤其是正在創建長時間運行的任務但未將其標記為此類),則線程池可能需要一段時間才能擴展,以使線程可用於執行新排隊的線程項目。

因此,我將整體上看待您的系統,看看您是在線程池中投入過多的工作還是不恰當地使用它。

我能以某種方式影響任務優先級,以便它在所有情況下立即開始運行嗎?

好了,您可以手動創建線程並接管所有使用,但請注意,即使在這里也不是“立即”的。 這與操作系統選擇調度任何新創建的線程一樣快。

或者,如果您確實需要“立即”運行的代碼,請在您已經知道已計划並正在運行的線程上運行它-您自己的當前線程。 當然,您將失去要求TPL處理任務並在完成時得到通知的優勢。 並可能捆綁諸如UI之類的寶貴線程。

暫無
暫無

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

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