Delen via


Waarschuwing voor compiler WFO2001

versie geïntroduceerd: .NET 9

Taak wordt doorgegeven aan InvokeAsync zonder annuleringstoken

Geef een annuleringstoken op wanneer u een Task of ValueTask van InvokeAsyncretourneert, zodat de gedelegeerde correct kan worden afgewacht en uitzonderingen kunnen worden verwerkt.

U kunt deze fout negeren als u een taak zonder supervisie wilt uitvoeren.

Deze waarschuwing corrigeren

Gebruik functies die annuleringstokens als argument gebruiken. Hierdoor kan de gedelegeerde die aan InvokeAsync is doorgegeven worden afgewacht, zodat uitzonderingen correct worden verwerkt.

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();
}

De waarschuwing beheren

Onderdrukt de waarschuwing met een van de volgende methoden:

  • Stel de ernst van de regel in het bestand .editorConfig.

    [*.{cs,vb}]
    dotnet_diagnostic.WFO2001.severity = none
    

    Zie Configuratiebestanden voor codeanalyseregelsvoor meer informatie over editorconfiguratiebestanden.

  • Voeg de volgende PropertyGroup toe aan uw projectbestand:

    <PropertyGroup>
        <NoWarn>$(NoWarn);WFO2001</NoWarn>
    </PropertyGroup>
    
  • Onderdrukken in code met de #pragma warning disable WFO2001 richtlijn.