Поделиться через


CA2025: не передайте экземпляры IDisposable в незавернутые задачи.

Недвижимость Ценность
Идентификатор правила CA2025
Заголовок Не передайте экземпляры IDisposable в незавернутые задачи
Категория Надёжность
Исправление является разрушающим или неразрушающим Неразрывный
включен по умолчанию в .NET 10 нет

Причина

IDisposable Экземпляр передается в незавершенную задачу и потенциально удаляется до завершения задачи с помощью экземпляра.

Описание правила

Незавержденные задачи, использующие IDisposable экземпляры, могут использовать эти экземпляры в течение длительного времени после удаления. Убедитесь, что задачи, использующие эти экземпляры, завершаются до удаления экземпляров.

Примеры

Следующие фрагменты кода (и их эквиваленты Visual Basic) являются нарушениями CA2025:

public Task DoSomethingAsync()
{
    // Using statements and using blocks can both be violations.
    using (var disposable = new DisposableThing())
    {
        return DoSomethingInternalAsync(disposable);
    }
}
public async Task DoThingsAsync()
{
    var disposable = new DisposableThing();
    var task = DoSomethingInternalAsync(disposable);
    // More code here.
    dispose.Dispose();
    // It's a violation if arguments are disposed before the task is awaited.
    await task.ConfigureAwait(false);
}

Когда следует подавлять предупреждения

Отключайте эти предупреждения, если вы знаете, что задачи завершаются с помощью IDisposable экземпляров, прежде чем они будут удалены.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA2025
// The code that's violating the rule is on this line.
#pragma warning restore CA2025

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".