簡體   English   中英

任務並行庫執行長時間運行的操作

[英]Task Parallel Library to perform long running operations

使用Task(任務並行庫)執行長時間運行的操作(有時可能需要幾個小時才能完成)是一種好方法嗎?

在一個堆棧溢出線程中,我看到一個人告訴如果長時間運行的操作需要花費幾秒鍾才能完成,則不要使用Threadpool。 我很懷疑,因為Task還在后台使用了ThreadPool來分發工作,而不會經歷線程創建/不必要的上下文切換的開銷。

只要使前台線程保持活動狀態,就可以使用任務-只要運行大量並發任務,請確保指定TaskCreationOptions.LongRunning選項以防止線程飢餓。

下面的簡單控制台應用程序演示了缺少前台線程將如何在進程結束時過早地終止“長時間運行的線程”。

class Program
{
    static void Main( string[] args )
    {
        Task.Factory.StartNew( () =>
            {
                Console.WriteLine( "Before sleep" );
                System.Threading.Thread.Sleep( 5000 );
                Console.WriteLine( "After sleep" );
            }
            , TaskCreationOptions.LongRunning
            );

        // press a key prior to the 5 second sleep expiration to demonstrate early termination
        Console.ReadKey();
    }
}

暫無
暫無

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

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