我有兩個async-await
連接到相同的TCP端口。互斥或信號量爲兩個不同的線程
RSP
民意調查每20000ms
。
SP
民意調查每個500ms
。
另一種方法,RP
,每當它被調用時都會輪詢,所以它可以是隨機的。
現在,無論何時調用RP
幾次,整個系統都會凍結。
我想知道,如果信號燈或互斥將更適合在這種情況下,我應該如何使用它。
我已經檢查了Semaphore的例子,但它們似乎大多數使用一種方法,但試圖同時運行其中5個。我如何使用兩種不同的方法?
static SemaphoreSlim _sem = new SemaphoreSlim(1, 1);
public async void RSP()
{
await Task.Run(() =>
{
while (true)
{
_sem.Wait();
//DoWork
_sem.Release();
Thread.Sleep(20000);
}
}
);
}
public async void SP(CancellationToken token)
{
await Task.Run(() =>
{
while (true)
{
try
{
if (token.IsCancellationRequested)
{
return;
}
_sem.Wait();
//DoWork
_sem.Release();
}
catch (Exception)
{
if (token.IsCancellationRequested)
{
return;
}
break;
}
Thread.Sleep(500);
}
});
}