Превратить событие в асинхронный вызов

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

По сути, я хочу превратить

void Prepare()
{
    foo = new Foo();
    foo.Initialized += OnFooInit;
    foo.Start();
}
string Bar
{
    return foo.Bar;  // Only available after OnFooInit has been called.
}

в это

async string GetBarAsync()
{
    foo = new Foo();
    foo.Initialized += OnFooInit;
    foo.Start();
    // Wait for OnFooInit to be called and run, but don't know how
    return foo.Bar;
}

Как это лучше всего сделать? Я мог бы просто зациклиться и ждать, но я пытаюсь найти лучший способ, такой как использование Monitor.Pulse(), AutoResetEvent или

8
задан svick 9 March 2013 в 23:35
поделиться