异步转同步方案(含超时机制)
const int TimeoutMs = 30;
private static readonly ManualResetEventSlim _manualResetEvent = new ManualResetEventSlim(false);
private static readonly object LockObj = new object();
static string GetInfoStr()
{
var rez = "超时";
Monitor.TryEnter(LockObj, TimeoutMs * 1000);
try
{
//临界区代码
var random = new Random();
_ = Task.Run(() =>
{
var newran = random.Next(100, 250);
// Debug.WriteLine($"正常等待时间{newran}");
Thread.Sleep(newran);
rez = $"正常执行{j}";
j++;
_manualResetEvent.Set();
});
_manualResetEvent.Wait(TimeSpan.FromSeconds(TimeoutMs));
Debug.WriteLine("SpinCount:" + _manualResetEvent.SpinCount);
_manualResetEvent.Reset();
}
finally
{
Monitor.Exit(LockObj);
}
return rez;
}
本文来自博客园,作者:willamyao,转载请注明原文链接:https://www.cnblogs.com/robertyao/p/14292807.html
代码改变世界

浙公网安备 33010602011771号