0

我想在 while 循环中每分钟连续调用多个函数。即使任何函数执行时间超过一分钟,其他函数也不应该等待其他函数完成。如果我像下面这样写,

        while (true)
        {
            if(executebinary) BinaryConversion();
            if(emailvalidation) ValidateEmails();

            System.Threading.Thread.Sleep(60000);
        }

函数 BinaryConversion() 的任何延迟也会延迟函数 ValidateEmails() 的执行。有没有办法同时运行这两个功能?

4

2 回答 2

1

如果您希望它们并行运行,可以使用Parallel.Invoke :

while (true)
{

    Parallel.Invoke(BinaryConversion, ValidateEmails);

    System.Threading.Thread.Sleep(1000);
}

根据您的编辑,一个更长的示例:

namespace CSharp
{
  using System;
  using System.Threading.Tasks;

  class Program
  {
    static void Main()
    {
      bool executebinary = true;
      bool emailvalidation = false;

      while (true)
      {
        Parallel.Invoke(
          () =>
            {
              if (executebinary)
              {
                BinaryConversion();
              }
            },
          () =>
            {
              if (emailvalidation)
              {
                ValidateEmails();
              }
            });

        System.Threading.Thread.Sleep(1000);
      }
    }

    private static void ValidateEmails()
    {

    }

    private static void BinaryConversion()
    {

    }
  }
}

根据您的评论,两者同时运行而不受对方干扰:

namespace CSharp
{
  using System;
  using System.Threading.Tasks;

  class Program
  {
    static void Main()
    {
      bool executebinary = true;
      bool emailvalidation = false;

      Parallel.Invoke(
        () =>
          {
            while(true) if (executebinary) BinaryConversion();
          },
        () =>
          {
            while(true) if (emailvalidation) ValidateEmails();
          });
      }
    }

    private static void ValidateEmails()
    {

    }

    private static void BinaryConversion()
    {

    }
  }
}
于 2013-07-17T10:36:07.503 回答
0

有多种方法:如果您使用的是 C# 5,则有两种方法:

如果您使用async创建方法,则可以

计时器:以 1 分钟间隔启动计时器,然后使用异步和等待调用方法:http: //msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx 或如 nvoigt 所述

在这种情况下,您不需要 Thread.Sleep。

如果您使用的是早期版本:

您仍然可以使用计时器,然后为这些方法创建一个委托,然后异步调用它们:

http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

您可能想要避免 thread.sleep 的原因是,如果它是一个 UI 应用程序,它会阻塞一分钟的线程,这是您想要避免的。

于 2013-07-17T10:46:30.117 回答