c# - Async Task.Delay CancellationToken
问题描述
我正在寻找一种方法来延迟 TextChanged 事件中一些昂贵的搜索。以下代码在用户完成输入后等待 300 毫秒,然后进行搜索。
Task.Delay(TimeSpan.FromMilliseconds(300), this.throttleCts.Token) // if no keystroke occurs, carry on after 500ms
.ContinueWith(
delegate { PerformSearch(e.NewText); },
CancellationToken.None,
TaskContinuationOptions.OnlyOnRanToCompletion,
TaskScheduler.FromCurrentSynchronizationContext());
上面的示例是否有更优雅的等效异步/等待代码?
我用这个替换了,但它抛出了 TaskCanceledException
await Task.Delay(300, this.throttleCts.Token);
PerformSearch(e.NewText);
解决方案
使用 async-await 的标准方法是捕获OperationCanceledException
.
private async void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
await Task.Delay(300, this.throttleCts.Token);
}
catch (OperationCanceledException)
{
return;
}
PerformSearch(e.NewText);
}
推荐阅读
- javascript - 如果单词包含特定字母的组合,则将整个单词包含在 span 元素中
- postgresql - 从 WSL 2 连接到 Postgresql 的现有实例
- ubuntu - 无法安装 nginx-module-image-filter
- java - 在 ActionEvent JButton 主体中无法访问 int 变量值
- sqlalchemy - SQLalchemy 选择列和 COUNT(column)
- azure - Azure 发布管道中未填充订阅
- javascript - 对象字面量的属性“bedRooms”隐含地具有“任何”类型。错误打字稿
- matlab-figure - 在 MATLAB 中围绕向量绘制 3D 圆形箭头
- android - 多次调用 Root Widget MaterialApp
- powershell - 在文件中搜索字符串并将内容打印到文件中