I have a method like this:
private async Task DoSomething()
{
// long running work here.
}
When I call the method like this it blocks t
async
methods begin their execution synchronously. async
is useful for composing asynchronous operations, but it does not magically make code run on another thread unless you tell it to.
You can use Task.Run
to schedule CPU-bound work to a threadpool thread.
See my async / await intro post or the async FAQ for more information.
Without the actual code, it's hard to tell you what's going on, but you can start your DoSomething with 'await Task.Yield();' to force it to return immediately, in case what's running before the first await is what's causing your UI issue.
How are you using await
? This doesn't block the UI:
private async Task DoSomething()
{
await Task.Delay(5000);
}
private async void button1_Click(object sender, EventArgs e)
{
await DoSomething();
MessageBox.Show("Finished");
}
Note that I didn't have to write any verbose callback stuff. That's the point of async
/await
.