【发布时间】:2018-06-06 14:51:50
【问题描述】:
我有这段代码,我想澄清一下 CancellationToken 的使用。
我读过这个关于使用取消令牌和标志之间区别的问题:
Difference between CancellationTokenSource and exit flag for Task loop exit
我注意到的一件事是它没有提及异常。所以这是我的问题。 如果调用了 Disappearing() 方法,那么这会导致 TaskCanceledException() 发生吗?这是使用 CancellationToken 而不是标志的好理由吗?
public partial class PhrasesFrame : Frame
{
CancellationTokenSource cts = new CancellationTokenSource();
public PhrasesFrame(PhrasesPage phrasesPage)
{
Device.BeginInvokeOnMainThread(() => ShowCards(cts.Token).ContinueWith((arg) => { }));
}
public void Disappearing()
{
cts.Cancel();
}
public async Task ShowCards(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
await PickCard();
}
}
public async Task PickCard()
{
await ShowCard();
}
private async Task ShowCard()
{
await ShowPhrase();
await ShowDetail();
}
private async Task ShowPhrase()
{
while (App.pauseCard || timer1Seconds > 0)
{
try
{
await Task.Delay(1000, tokenSource1.Token);
}
catch (TaskCanceledException)
{
// do action
break;
}
}
【问题讨论】:
-
您无法取消 CancellationToken
标签: c# multithreading cancellation-token