Ответ 1
После подачи проблемы с помощью corefx, замечания были обновлены, чтобы сделать это гарантированной функцией:
Вы также можете использовать оператор С#
default(CancellationToken)
для создания пустого маркера отмены.
Рассматривая реализацию CancellationToken.None
, он просто возвращает default(CancellationToken)
. Однако я не вижу ссылки в документации CancellationToken
, что они эквивалентны.
Я хотел бы предложить API, как это, но только до тех пор, пока я не уверен, что он всегда будет работать:
Task DoSomething(CancellationToken token = default(CancellationToken))
Определено ли поведение, что default(CancellationToken)
совпадает с CancellationToken.None
, или это просто деталь реализации?
После подачи проблемы с помощью corefx, замечания были обновлены, чтобы сделать это гарантированной функцией:
Вы также можете использовать оператор С#
default(CancellationToken)
для создания пустого маркера отмены.
Они одинаковы. Проверить исходный код
public static CancellationToken None
{
get { return default(CancellationToken); }
}
CancellationToken.None
просто возвращает новое CancellationToken:
public static CancellationToken None
{
get
{
return new CancellationToken();
}
}
Таким образом, CancellationToken
является структурой, тогда default(CancellationToken)
будет возвращать одно и то же значение. С# Spec 5.2:
Для переменной типа значения значение по умолчанию такое же, как и значение значение, вычисленное конструктором default-types по умолчанию
UPDATE: это поведение не определено в MSDN, поэтому вы можете полагаться только на текущую реализацию.
default
определяется для каждого типа. Для ссылочных типов null
. Это "пустой" экземпляр для структур, т.е. Один со всеми свойствами, инициализированными соответствующими значениями по умолчанию.