Подтвердить что ты не робот

Является ли значение по умолчанию (CancellationToken) эквивалентом CancellationToken.None?

Рассматривая реализацию CancellationToken.None, он просто возвращает default(CancellationToken). Однако я не вижу ссылки в документации CancellationToken, что они эквивалентны.

Я хотел бы предложить API, как это, но только до тех пор, пока я не уверен, что он всегда будет работать:

Task DoSomething(CancellationToken token = default(CancellationToken))

Определено ли поведение, что default(CancellationToken) совпадает с CancellationToken.None, или это просто деталь реализации?

4b9b3361

Ответ 1

После подачи проблемы с помощью corefx, замечания были обновлены, чтобы сделать это гарантированной функцией:

Вы также можете использовать оператор С# default(CancellationToken) для создания пустого маркера отмены.

Ответ 3

CancellationToken.None просто возвращает новое CancellationToken:

public static CancellationToken None
{    
    get
    {
        return new CancellationToken();
    }
}

Таким образом, CancellationToken является структурой, тогда default(CancellationToken) будет возвращать одно и то же значение. С# Spec 5.2:

Для переменной типа значения значение по умолчанию такое же, как и значение значение, вычисленное конструктором default-types по умолчанию

UPDATE: это поведение не определено в MSDN, поэтому вы можете полагаться только на текущую реализацию.

Ответ 4

default определяется для каждого типа. Для ссылочных типов null. Это "пустой" экземпляр для структур, т.е. Один со всеми свойствами, инициализированными соответствующими значениями по умолчанию.