Task.Factory.FromAsync никогда не вызывает метод end - PullRequest
1 голос
/ 03 ноября 2011

Я немного озадачен и уже часами смотрю / отлаживаю этот код.

В моем сервисе у меня -

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), вызывается начало, я сохраняю переменную и устанавливаю результат в tcs в моем макете.оказание услуг.но мой EndMethod в MockAnotherService никогда не вызывается.

Я предполагал, что tcs, возвращенные из сервиса mock, получат сигнал, когда я установлю для него результат / исключение, в результате чего вызов 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;
    }
...