Я просто наткнулся на довольно опасный сценарий при переносе приложения ASP.NET в модель async/await.
Ситуация заключается в том, что я создал метод async: async Task DoWhateverAsync()
, изменил объявление в интерфейсе на Task DoWhateverAsync()
и выразил надежду, что компилятор скажет мне, где теперь код неправильный, через это предупреждение. Ну, тяжелая удача. Везде, где этот объект вводится через интерфейс, предупреждение не происходит.: - (
Это опасно. Есть ли способ автоматически проверять не ожидаемые методы, возвращающие задачи? Я не против нескольких предупреждений слишком много, но я не хочу пропустить его.
Вот пример:
using System.Threading.Tasks;
namespace AsyncAwaitGames
{
// In my real case, that method just returns Task.
public interface ICallee { Task<int> DoSomethingAsync(); }
public class Callee: ICallee
{
public async Task<int> DoSomethingAsync() => await Task.FromResult(0);
}
public class Caller
{
public void DoCall()
{
ICallee xxx = new Callee();
// In my real case, the method just returns Task,
// so there is no type mismatch when assigning a result
// either.
xxx.DoSomethingAsync(); // This is where I had hoped for a warning.
}
}
}