私はタスクで働いたが、私はこの構文に遭遇:アクション:指定タスクC#
:class Program { static void TestMethod() { Console.WriteLine("Test"); } static void Main(string[] args) { Task t = Task.Run(action: TestMethod); // Why this action: specifier t.Wait(); Console.ReadKey(); } }
私はアクションのキーワードを削除した場合、コンパイラは私に言うエラーメッセージを与えます
エラーCS0121:次のメソッドまたは プロパティ間で呼び出しが曖昧です: 'System.Threading.Tasks.Task.Run(System.Action)'および 'System.Threading.Tasks.Task.Run(System.Func) '
実際には、我々が合格メソッドの戻りType
を持っていないので、この種のメッセージを取得するには奇妙なので、それがAction
代わりのFunc<>
として扱われるべきです。
私は、Action
または匿名メソッドにキャストするようなエラーを修正する他の多くの方法があることは知っています。しかし、私はこのaction:
がどこから来たのか理解できません。
私はそれが名前付き引数であることに同意しますが、私たちの場合、アクションのパラメータを1つだけ渡すだけです。そして、名前を指定せずに渡すことができます。なぜなら、使用しないときにコードがエラーメッセージをdipslayしたのはなぜですか? –
エラーメッセージには、1つの引数を受け取る2つのバージョンのRunメソッドがあります。渡された引数はSystem.Func型でもSystem.Action型でもないが、両方の型に変換できるため、コンパイラがどのバージョンを取るべきか明確ではない。しかし、渡された引数の名前が指定されていれば、System-ActionバージョンのRunの引数だけが* action *と呼ばれるので、明らかになります。 – MarkusParker
ありがとうございました:) –