Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Недвижимость | Ценность |
---|---|
Идентификатор правила | 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
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".