Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Introducerad version: .NET 9
Uppgiften skickas till InvokeAsync utan en annulleringstoken
Ange en annulleringstoken när du returnerar en Task eller ValueTask från InvokeAsync, vilket säkerställer att ombudet kan inväntas korrekt och att undantag kan hanteras.
Du kan ignorera det här felet om din avsikt är att köra en oövervakad uppgift.
Så här korrigerar du den här varningen
Använd funktioner som tar annulleringstoken som argument. På så sätt kan ombudet som skickas till InvokeAsync inväntas, vilket säkerställer att undantag hanteras korrekt.
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();
}
Hantera varningen
Ignorera varningen med någon av följande metoder:
Ange allvarlighetsgraden för regeln i filen .editorConfig.
[*.{cs,vb}] dotnet_diagnostic.WFO2001.severity = noneMer information om redigeringskonfigurationsfiler finns i Konfigurationsfiler för kodanalysregler.
Lägg till följande
PropertyGroupi projektfilen:<PropertyGroup> <NoWarn>$(NoWarn);WFO2001</NoWarn> </PropertyGroup>Undertryck i kod med
#pragma warning disable WFO2001-direktivet.
.NET Desktop feedback