ホームページ > バックエンド開発 > C++ > C# を使用して限られた数のスレッドで複数のタスクを同時に実行するにはどうすればよいですか?

C# を使用して限られた数のスレッドで複数のタスクを同時に実行するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-02 15:08:38
オリジナル
616 人が閲覧しました

How Can I Execute Multiple Tasks Concurrently with a Limited Number of Threads Using C#?

制限されたスレッドでタスクを同時に実行する

問題:

次のセットがあるとします。連続して実行する必要があるタスク。一度に最大 X 個のタスクのみを実行します。従来、このようなタスクには ThreadPool.QueueUserWorkItem() が使用されていましたが、現在では次善のアプローチとみなされています。

タスクを使用した解決策:

この同時実行制限を達成するには、以下を使用します。タスクでは、SemaphoreSlim オブジェクトを使用して、利用可能なスレッドの数を管理できます。このアプローチを示すコード スニペットは次のとおりです。

SemaphoreSlim maxThread = new SemaphoreSlim(10);

for (int i = 0; i < 115; i++)
{
    maxThread.Wait();
    Task.Factory.StartNew(() =>
        {
            // Your task implementation
        }, TaskCreationOptions.LongRunning)
    .ContinueWith((task) => maxThread.Release());
}
ログイン後にコピー

コードの動作方法は次のとおりです。

  • SemaphoreSlim の初期化: SemaphoreSlim は最大スレッド数で初期化されます。 10 個の場合、最大 10 個のタスクを実行できます
  • タスク実行: 実行されるタスクごとに、セマフォの Wait() メソッドが呼び出され、スレッドが使用可能になるまでブロックされます。スレッドが解放されると、Task.Factory.StartNew() を使用して新しいタスクが開始されます。
  • タスク完了: 各タスクが完了すると、タスクにアタッチされている ContinueWith() メソッドが解放されます。セマフォの Release() メソッドの呼び出しによって使用されるスレッド。
  • Sequential実行: セマフォによって使用できるスレッドが制限されているため、タスクは順次実行され、一度に最大 10 個のタスクが実行されます。

以上がC# を使用して限られた数のスレッドで複数のタスクを同時に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート