Ключевое слово async
на самом деле не является частью унаследованной сигнатуры метода, а скорее является сигналом компилятору, что ему необходимо скомпилировать и переписать метод в соответствии с шаблоном для методов async.
Таким образом, вы можете оставить ключевое слово async
по унаследованным методам, если унаследованный метод не использует ключевое слово await
.
Обратите внимание, что вы все равно придется возвращать Task
или Task<T>
, что часть является часть унаследованного метода подписи.
Так что это даст вам предупреждение:
class Base
{
public virtual async Task<int> Method()
{
await Task.Delay(10);
return 42;
}
}
class Derived : Base
{
// next line produces warning
public override async Task<int> Method()
{
return 42;
}
}
Предупреждение заключается в следующем:
Предупреждение: CS1998 Этот метод асинхронной не хватает «ждать» операторов и будет работать синхронно. Рассмотрите возможность использования оператора await
для ожидания неблокирующих вызовов API или await Task.Run(...)
для выполнения работы с процессором в фоновом потоке.
Это, однако, не будет производить предупреждение:
class Derived : Base
{
public override Task<int> Method()
{
return Task.FromResult(42);
}
}
Обратите внимание, что я изменил return
заявление, в этом последнем методе, так как часть «магии», что async
ключевое слово приносит, чтобы автоматически обернуть возвращаемое значение внутри Task<T>
. Если у вас есть другие способы получить Task<T>
, очевидно, вам не нужно обертывать результат, как я сделал выше.
Непонятный вопрос. 'async' не является частью сигнатуры метода, которая наследуется. Просто не пишите 'async' при объявлении переопределенного метода, который не использует' await'. Вам все равно придется возвращать 'Task' или' Task 'хотя. Вы должны опубликовать некоторый код, который показывает проблему, а также фактическое предупреждение, так что нет никакой путаницы в отношении той конкретной проблемы, с которой вы сталкиваетесь. –
Не можете ли вы опустить асинхронное ключевое слово, если метод не использует ключевое слово ожидания? – Stefan
некоторые примеры того, что вы нашли, должны сделать его лучшим вопросом. –