Я только что попробовал ваши примеры, и проблема не возникает в вашем втором коде (замена AddAsync(i)
на AddAsync(obj2)
для соответствия логике первого кода.
Что касается объяснения правила, я думаю, что веб-сайтдовольно ясно, но позвольте мне предоставить пример кода, чтобы попытаться проиллюстрировать неправильное поведение.
static async void Main(string[] args)
{
var x = new Program().Add(null); // Exception is not raised here...
// do some other things
await x; // ... but here when awaited
}
Как вы видите, проблема не возникает, когда вы ожидаете.
Очевидно,если вы уверены, что НИКОГДА не окажетесь в такой ситуации и что никто не будет использовать ваш метод таким образом, вы можете отключить правило.