Я читаю исходный код Interactive Extensions и нашел строку которую я не могу понять:
public static Task<bool> UsingEnumerator(this Task<bool> task, IDisposable disposable)
{
task.ContinueWith(t =>
{
if (t.IsFaulted)
{
var ignored = t.Exception; // don't remove!
}
if (t.IsFaulted || t.IsCanceled || !t.Result)
disposable.Dispose();
}, TaskContinuationOptions.ExecuteSynchronously);
return task;
}
Я также не вижу соответствующих комментариев в документах для свойств IsFaulted
или Exception
.
Почему эта строка var ignored = t.Exception; // don't remove!
нужна в этом контексте?
Связанный с этим вопрос: я думал, что такие строки оптимизированы в режиме Release, но, учитывая комментарии и намерения здесь, это не так (если код верен). Итак, почему эта строка остается в режиме Release?