2016-11-25 7 views
2

私はちょうど並列プログラミングを始めました。コンソール上にメッセージを出力するアクションデリゲートメソッドを作成したいと思います。私がAction<string>Action<object>PritMessageに代入すると、そのオブジェクトはオブジェクトになるが、 'stringコンパイラはエラーをスローする。タスク付きのタスク代理人が文字列パラメータを受け入れる

'System.Threading.Tasks.Task.Task(System.Action、オブジェクト)' のための最良のオーバーロードされたメソッドが一致。
引数1:あなたはTask constructorsを調べると、あなたができないことがわかります 'System.Action <オブジェクト>'

static void Main(string[] args) 
{ 
    string message = "test"; 
    Action<string> print = PrintMessage; 
    Task task = new Task(print, message); 
    task.Start(); 
    Console.ReadKey(); 
} 

static void PrintMessage(string message) 
{ 
    Console.WriteLine(message); 
} 

答えて

1

に 'System.Action <文字列>' から変換することはできませんパラメーターなしまたは単一のobjectパラメーター以外のものを受け入れるActionでタスクを作成します。

Task.Run(() => 
{ 
    PrintMessage(message); 
} 

しかし、より良いアプローチは、署名を変更することであるとしてパラメータキャスト:

static void Main(string[] args) 
{ 
    var message = "test"; 
    Task task = new Task(PrintMessage, message); 
    task.Start(); 
    Console.ReadKey(); 
} 

static void PrintMessage(object messageObj) 
{ 
    var message = messageObj as string; 
    Console.WriteLine(message); 
} 

それとも、単にこのように、ラムダとTaskを実行することができ、この特定の試料について

単にコンソールにオブジェクトを印刷してください:

static void PrintMessage(object message) 
{ 
    Console.WriteLine(message); 
} 
関連する問題