我想在while循环中每分钟连续调用多个函数。即使任何函数执行时间超过一分钟,其他函数也不应等待其他函数完成。 如果我写的如下,
while (true)
{
if(executebinary) BinaryConversion();
if(emailvalidation) ValidateEmails();
System.Threading.Thread.Sleep(60000);
}
函数中的任何延迟BinaryConversion()也会延迟函数ValidateEmails()的执行。有没有办法同时运行这两个功能?
答案 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应用程序,它会阻止您想要避免的一分钟线程。