Dela via


Kompilatorvarning WFO2001

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 = none
    

    Mer information om redigeringskonfigurationsfiler finns i Konfigurationsfiler för kodanalysregler.

  • Lägg till följande PropertyGroup i projektfilen:

    <PropertyGroup>
        <NoWarn>$(NoWarn);WFO2001</NoWarn>
    </PropertyGroup>
    
  • Undertryck i kod med #pragma warning disable WFO2001-direktivet.