可以更改各种扩展方法以允许下面单元测试中的FireAndForget调用比我更优雅吗?
using System;
using System.Threading.Tasks;
namespace MyNamespace
{
public static class AsyncAdditions
{
private static async Task FireAndForgetInternal<T>(Func<Task<T>> task, Action<T> completion) {
T value = await task();
completion(value);
}
public static void FireAndForget<T>(Func<Task<T>> task, Action<T> completion) {
AsyncAdditions.FireAndForgetInternal(task, completion).DoNotAwait();
}
/// <summary>Empty method gets rid of stupid compiler warning</summary>
public static void DoNotAwait(this Task task) {}
}
}
测试:
using System;
using System.Threading.Tasks;
using NUnit.Framework;
using MyNamespace;
namespace MyTests
{
[TestFixture()]
public class AsyncTests
{
public async Task<int> GetAsyncInteger()
{
return await Task.Factory.StartNew(() => 6);
}
public int MyNumber { get; set;}
public void SlowSynchronousJob() {
for (int i = 0; i < 1E7; i++) {
}
}
[Test()]
public void TestSetter() {
AsyncAdditions.FireAndForget(this.GetAsyncInteger, n => this.MyNumber = n);
this.SlowSynchronousJob();
Assert.AreEqual(6, this.MyNumber);
}
}
}