I use a library that has an asynchronous method called DoWork(...) that will raise a WorkDone event when the operation completes.
I would like to write a method that calls this library, but instead of maintaining the same pattern I would like my method to be async
so it can be called with await
.
In essence, what I am trying to do is:
public async Task<Result> SomeMethod()
{
var result = new Task<Result>();
library.WorkDone += (data) =>
{
result.Result = data;
}
library.DoWork();
return await result;
}
(not working because Result is readonly)
Can this be done?
You can use TaskCompletionSource:
I will build on ws0205's answer:
First, you indicate that you want your method "to be called with
await
". You achieve this by returning aTask
.I also think that it's better to make the following adjustments to ws0205's answer: