タスク並列ライブラリを使用して、ファイアアンドフォーゲット機能を実装しようとしています。へのインライン呼び出しを使用すると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);
}
}