Issue
I have this code, but Display alert never fired, can't understand - why so?
await Task.Delay(_doublePressTimeout - _buttonReleaseTimeout)
.ContinueWith(async c =>
{
if (pushed != Constants.Direction.Empty)
{
await Shell.Current.DisplayAlert("qwe", pushed.ToString(), "OK");
}
});
But works this way:
await Task.Delay(_doublePressTimeout - _buttonReleaseTimeout);
if (pushed != Constants.Direction.Empty)
{
await Shell.Current.DisplayAlert("qwe", pushed.ToString() + " begin", "OK");
}
WHY?
Solution
Tasks have an implicit .ConfigureAwait(true)
when they're awaited straight up, which is why you have a warning to state it explicitly (or even better, use .ConfigureAwait(false)
selectively for large performance increases where applicable).
.ContinueWith
can also capture the context and/or schedule the continuation on specific threads, which you should be doing for UI access, but you need to call the overload with the parameters for it.
That said, you'll be hard pressed to find a valid use case for .ContinueWith
over just task awaiting. As you can see from your own example, it's easy to translate broken .ContinueWith
to correct (and simpler) await Task
code.
Answered By - Blindy
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.