36

の実装を見ると、CancellationToken.None単純に を返していdefault(CancellationToken)ます。CancellationTokenただし、のドキュメントには、2 つが同等であるという参照はありません。

私はこのような API を提供したいと思っていますが、それが常に機能することを確認するまでは提供しません。

Task DoSomething(CancellationToken token = default(CancellationToken))

default(CancellationToken)と同じ定義済みの動作CancellationToken.Noneですか、それとも実装の詳細だけですか?

4

5 に答える 5

39

corefx で問題を報告した後、ドキュメントのコメントが更新され、これが保証された機能になりました。

C#default(CancellationToken)ステートメントを使用して、空のキャンセル トークンを作成することもできます。

于 2015-09-17T15:24:52.377 に答える
24

それらは同じです。ソースコードを確認する

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

https://referencesource.microsoft.com/#mscorlib/system/threading/CancellationToken.cs,36b17ded8b1a228cから

于 2014-04-11T11:20:13.333 に答える
8

CancellationToken.None単純に新しい CancellationToken を返します。

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

したがってCancellationToken、構造体であり、default(CancellationToken)同じ値を返します。C# 仕様 5.2:

値型の変数の場合、デフォルト値は、値型のデフォルト コンストラクターによって計算された値と同じです。

更新: この動作は MSDN では定義されていないため、現在の実装にのみ依存できます。

于 2013-10-23T13:57:15.367 に答える