Как использовать задачу <T>, вызывающую событие и ожидающую завершения события

У меня есть следующий сценарий:

Клиент, запрашивающий веб-сервис для запуска

public bool Start(MyProject project, string error)

Веб-сервис, который получает вызов от клиента в методе

public event EventHandler<StartEventArgs> startEvent;

public bool Start(MyProject project, string error)
{
    Task<bool> result = StartAsync(project, error);

    return result.Result;
}

protected virtual void OnStart(StartEventArgs e)
{
    // thread safe trick, snapshot of event
    var se = startEvent;
    if (se != null)
    {
        startEvent(this, e);
    }
}

private Task<bool> StartAsync(MyProject project, string error)
{
    var taskCompletion = new TaskCompletionSource<bool>();

    this.startEvent += (p, e) => taskCompletion.TrySetResult((e.Error == string.Empty) ? true : false);

    this.OnStart(new StartEventArgs(project, error));

    return taskCompletion.Task;
}

Приложение, которое подписывается на событие, которое находится в веб-службе:

app.Start += EventHandler(App_Start)

private bool App_Start()
{
   // does something
   returns true/false
}

Я хочу, чтобы веб-служба отключила событие в задаче, затем подождите, пока завершится функция в app.exe, а затем вернитесь сюда, чтобы уведомить пользователя об успешном завершении задачи.

Я не уверен, как это сделать, но в теории это будет выглядеть примерно так:

Task<bool> startTask = Task.Factory.StartNew(() => { OnStart() });
startTask.WaitAll(); // I think this is what I would need to for 4.0
return startTask.Result

Я надеюсь, что я достаточно нагляден, чтобы кто-то увидел, что я пытаюсь сделать. Я бы хотел, чтобы сервис не знал ничего о клиенте и просто запускал задачу, а когда событие завершилось, вернитесь к этой точке и верните клиенту логическое значение, представляющее успех / неудачу.

Возможно ли это, или я действительно ошибаюсь?

Обновить: Очевидно, OnStart не является событием, так как мне сделать то, что вы пытаетесь мне объяснить?

Ответы на вопрос(0)

Ваш ответ на вопрос