¿Cómo usar async / await con una biblioteca que usa un patrón asíncrono basado en eventos?

Uso una biblioteca que tiene un método asíncrono llamado DoWork (...) que generará un evento WorkDone cuando finalice la operación.

Me gustaría escribir un método que llame a esta biblioteca, pero en lugar de mantener el mismo patrón, me gustaría que mi método fueraasync por lo que puede ser llamado conawait.

En esencia, lo que estoy tratando de hacer es:

public async Task<Result> SomeMethod()
{
    var result = new Task<Result>();

    library.WorkDone += (data) =>
    {
        result.Result = data;
    }
    library.DoWork();

    return await result;
}

(no funciona porque el resultado es de solo lectura)

Se puede hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta