我有点难过,现在已经盯着/调试这段代码几个小时了。
在我的服务中,我有 -
var task = Task.Factory.FromAsync(
AnotherService.BeginMethod(arg1, null null),
AnotherService.EndMethod,
TaskCreationOptions.None)
task.ContinueWith((antecedent) =>
{
if (antecedent.isFaulted....)
else // do something else
}
我将上述代码包装在TaskCompletionSource
中,并在task.ContinueWith
方法中设置结果/异常。到目前为止,非常好。
问题 -
当我正在调试我的单元测试时(我有针对AnotherService的模拟),调用了begin,我存储了变量并将结果设置在我的模拟服务中的tcs上。但EndMethod
中的MockAnotherService
从未被调用过。
我假设当我在模拟服务上设置结果/异常时,会从模拟服务返回的tcs发出信号,导致From.Asyn
c调用调用我的End方法。情况不是这样吗?
编辑 -
我的模拟实现 -
public IAsyncResult BeginSetDevice(Device device, AsyncCallback callback, object state)
{
var tcs = new TaskCompletionSource<string>(state);
var setTask = Task.Factory.StartNew(
() =>
{
if (this.FaultedState)
{
tcs.SetException(new Exception("You asked for a fault"));
}
else
{
this.DeviceToReturn = device;
tcs.SetResult("success");
}
});
return tcs.Task;
}