यहाँ कोड है, लेकिन मुझे समझ नहीं आ रहा है कि क्या 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 में से एक धागा पूरा हो जाएगा तो दूसरा धागा शुरू हो जाएगा। अगर मैं सही नहीं हूं तो मुझे नमूना स्थिति के साथ समझने में मदद करें।
await
साथ की आवश्यकता क्यों है ss.WaitAsync();
? क्या करता ss.WaitAsync();
है?