Task.Factory.FromAsync从不调用end方法

时间:2011-11-03 17:24:38

标签: c# asynchronous task factory

我有点难过,现在已经盯着/调试这段代码几个小时了。

在我的服务中,我有 -

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;
    }

0 个答案:

没有答案