引入的版本:.NET 9
Task 在没有取消令牌的情况下传递至 InvokeAsync
返回 Task 中的 ValueTask 或 InvokeAsync 时提供取消令牌,以确保可正确等待委托并且可处理异常。
如果打算运行未监督的任务,则可以忽略此错误。
更正此警告
使用将取消令牌作为参数的函数。 这将允许等待传递给 InvokeAsync
的委托,以确保正确处理异常。
CancellationTokenSource _stopWatchTokenSource = new();
CancellationToken _stopWatchToken;
private async void btnStopWatch_Click(object sender, EventArgs e)
{
if (_stopWatchToken.CanBeCanceled)
{
btnStopWatch.Text = "Start";
_stopWatchTokenSource.Cancel();
_stopWatchTokenSource.Dispose();
_stopWatchTokenSource = new CancellationTokenSource();
_stopWatchToken = CancellationToken.None;
return;
}
_stopWatchToken = _stopWatchTokenSource.Token;
btnStopWatch.Text = "Stop";
await Task.Run(async () =>
{
while (true)
{
try
{
await this.InvokeAsync(UpdateUiAsync, _stopWatchToken);
}
catch (TaskCanceledException)
{
break;
}
}
});
}
// The actual UI update method
async ValueTask UpdateUiAsync(CancellationToken cancellation)
{
lblStopWatch.Text = $"{DateTime.Now:HH:mm:ss - fff}";
await Task.Delay(20, cancellation);
}
// Make sure that the token is cancelled when the form is closed
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
_stopWatchTokenSource.Cancel();
}
管理警告
使用以下任一方法禁止显示警告:
在 .editorConfig 文件中设置规则的严重性。
[*.{cs,vb}] dotnet_diagnostic.WFO2001.severity = none
有关编辑器配置文件的详细信息,请参阅 用于代码分析规则的配置文件。
将以下
PropertyGroup
添加到项目文件:<PropertyGroup> <NoWarn>$(NoWarn);WFO2001</NoWarn> </PropertyGroup>
在代码中使用
#pragma warning disable WFO2001
指令进行抑制。