Принудительное ожидание при вызове функции - PullRequest
0 голосов
/ 06 июля 2018

Можно ли создать функцию, которая будет выдавать ошибку, если рядом с ней нет ключевого слова await? Я не использую это ни для чего, мне просто любопытно, и я думаю, что я могу видеть, что это может использовать, если обработанные данные сильно влияют на работу программы.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Согласился с DavidG. Попробуйте установить уровень предупреждения компилятора на 4 и включить «Обрабатывать предупреждения как ошибки» для вашего проекта. Сделайте это для Debug, Release и всех конфигураций.

0 голосов
/ 06 июля 2018

Не обязательно хороший способ сделать это. Повышение кода предупреждения до ошибки является одним из вариантов. Но если вас интересуют только async функции, которые возвращают результат, то есть Task<T>, тогда есть возможность проверки времени компиляции.

Например:

public class ForceAwait
{
    public Task<int> MethodAsync() => Task.FromResult(1);

    public Task Caller_Does_Not_Compile()
    {
        int result = MethodAsync();
        return Task.CompletedTask;
    }

    public async Task Caller_Compiles()
    {
        int result = await MethodAsync();
    }
}

Путем явного ввода результата в T вместо использования var тогда компилятор может выдать ошибку, если вы попытаетесь присвоить Task<T> переменной типа T. Конечно, это только хитрость / хак, который не применим к методу, возвращающему Task.

...