我正在尝试使用 Task Parallel Library 来实现 fire and forget 功能。通过对 的内联调用Task.Factory.StartNew
,一切都按预期工作。但是,我想将Task.Factory.StartNew
调用移动到一个单独的类中,以便我可以添加日志记录、错误处理等,并可能在将来升级代码,因为将更好的线程类等添加到 .NET Framework 中,而无需复制代码。
下面是一个我希望通过的单元测试,但事实并非如此。我将不胜感激帮助试图弄清楚如何使这项工作。
[TestFixture]
public class ThreadingServiceFixture
{
public static bool methodFired = false;
[Test]
public void CanFireAndForgetWithThreadingService()
{
try
{
var service = new ThreadingService();
service.FireAndForget(() => methodFired = true);
var endTime = DateTime.Now.AddSeconds(1);
while(DateTime.Now < endTime)
{
//wait
}
Assert.IsTrue(methodFired == true);
}
finally
{
methodFired = false;
}
}
}
public class ThreadingService
{
public Task FireAndForget(Action action)
{
return Task.Factory.StartNew(() => action);
}
}