これが私が持っているコードですが、何SemaphoreSlim
をしているのかわかりません。
async Task WorkerMainAsync()
{
SemaphoreSlim ss = new SemaphoreSlim(10);
List<Task> trackedTasks = new List<Task>();
while (DoMore())
{
await ss.WaitAsync();
trackedTasks.Add(Task.Run(() =>
{
DoPollingThenWorkAsync();
ss.Release();
}));
}
await Task.WhenAll(trackedTasks);
}
void DoPollingThenWorkAsync()
{
var msg = Poll();
if (msg != null)
{
Thread.Sleep(2000); // process the long running CPU-bound job
}
}
何待たずss.WaitAsync();
してss.Release();
いますか?
一度に50スレッドを実行してから、次のようなコードを書くと、一度にSemaphoreSlim ss = new SemaphoreSlim(10);
10個のアクティブスレッドを実行するように強制されると思います。
10個のスレッドの1つが完了すると、別のスレッドが開始されます。私が正しくない場合は、サンプルの状況を理解するのを手伝ってください。
なぜawait
一緒に必要なのss.WaitAsync();
ですか?何をしss.WaitAsync();
ますか?