连续执行多个函数c#

时间:2013-07-17 10:32:29

标签: .net multithreading

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

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

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

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

2 个答案:

答案 0 :(得分: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()
    {

    }
  }
}

答案 1 :(得分:0)

有多种方法: 如果你使用C#5,那么有两种方式:

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

计时器:以1分钟的间隔启动计时器,然后使用async& amp;等待:  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应用程序,它会阻止您想要避免的一分钟线程。