带有 ManualResetEvent 的 foreach 中的计时器

Timer in foreach with ManualResetEvent

当我单击按钮时,循环开始读取数据库并将查询的每一行发送到另一台服务器。当得到响应时 - 循环继续。

代码实现如下

private ManualResetEvent _mre = new ManualResetEvent(true);

Thread startUpload = new Thread(() =>
{
   //read database

   foreach (DataRow dr in dt.Rows)
      {

         //send request

         _mre.WaitOne();
      }
});

startUpload.Start();

问题是发送请求时可能没有答案。就我而言,这是正常的。但如果没有,答案就来了,然后循环停止。我需要在循环定时器里面做,在由于没有响应而停止循环的情况下,它会在 30 秒内继续循环。

计时器将不得不做

_mre.Set();

重要提示:您正在将 ManualResetEvent 初始状态设置为 true,如果您愿意,请将其设置为 false停止当前进程并等待信号。

编辑:

例子

private ManualResetEvent _mre = new ManualResetEvent(false);

private void ReadTheDatabase()
{
    Thread startUpload = new Thread(() =>
    {
        // Read the data

        foreach (DataRow dr in dt.Rows)
        {
            // Send request
            Thread requestMethod = new Thread(() =>
            {
                // Imitate process with thread sleep
                Thread.Sleep(5000);
                _mre.Set();
            });

            requestMethod.Start();

            _mre.WaitOne(30000, false);
        }
    });

    startUpload.Start();
}