I have this method which plays a sound, when the user taps on the screen, & I want it to stop playing it when the user taps the screen again. But the problem is "DoSomething()" method doesn't stop, it keeps going till it finishes.
bool keepdoing = true;
private async void ScreenTap(object sender, System.Windows.Input.GestureEventArgs e)
{
keepdoing = !keepdoing;
if (!playing) { DoSomething(); }
}
private async void DoSomething()
{
playing = true;
for (int i = 0; keepdoing ; count++)
{
await doingsomething(text);
}
playing = false;
}
Any help will be appreciated.
Thanks :)
You can cancel an asynchronous operation after a period of time by using the CancellationTokenSource. CancelAfter method if you don't want to wait for the operation to finish.
The call to the async method starts an asynchronous task. However, because no Await operator is applied, the program continues without waiting for the task to complete. In most cases, that behavior isn't expected.
If you use a Task return type for an async method, a calling method can use an await operator to suspend the caller's completion until the called async method has finished. In the following example, the WaitAndApologizeAsync method doesn't contain a return statement, so the method returns a Task object.
When a asynchronous method is executed, the code runs but nothing happens other than a compiler warning.
This is what a CancellationToken
is for.
CancellationTokenSource cts;
private async void ScreenTap(object sender, System.Windows.Input.GestureEventArgs e)
{
if (cts == null)
{
cts = new CancellationTokenSource();
try
{
await DoSomethingAsync(cts.Token);
}
catch (OperationCanceledException)
{
}
finally
{
cts = null;
}
}
else
{
cts.Cancel();
cts = null;
}
}
private async Task DoSomethingAsync(CancellationToken token)
{
playing = true;
for (int i = 0; ; count++)
{
token.ThrowIfCancellationRequested();
await doingsomethingAsync(text, token);
}
playing = false;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With