■55037 / inTopicNo.1) |
TPLで引数を持たせたデリゲートを使うには2 |
□投稿者/ orange (8回)-(2010/11/15(Mon) 15:23:40)
|
分類:[.NET 全般]
数日前に,こちらの掲示板で「TPLで引数を持たせたデリゲートを使うには」とういタイトルで質問させていたorangeです. まだ,分からないことがありましたので,もう一度させて頂きました. http://bbs.wankuma.com/index.cgi?mode=al2&namber=54984 (以前の記事)
教えて頂きたい内容は 「TPLで引数有のデリゲートを使用する方法」です.
以前の質問で http://msdn.microsoft.com/ja-jp/library/dd235693.aspxに記載されている public Task( Action<Object> action, Object state//メソッドに渡す引数 ) コンストラクタを使えばいいのではないかとアドバイスを頂きました.
そこで,最終的には,以下に記載するようなコードを導いたのですが上手くいきません. 以下のコードは,string型を引数に1つ持つメソッドvoid Process1(string s)を10個並列実行させることを目的したプログラムです. (Startメソッドは省略しております)
//public void Process1(string s){}; Action<string> delProcess1 = this.Process1;
Task[] tasks = new Task[10]; for (int i = 0; i < tasks.Length; i++) { tasks[i] = new Task(delProcess1, "abc"); }
エラー内容は以下の通りです. ============================================================= (エラー1) 'System.Threading.Tasks.Task.Task(System.Action, System.Threading.CancellationToken)' に最も適している オーバーロード メソッドには無効な引数がいくつか含まれています。
(エラー2) 引数 1: 'System.Action<string>'から'System.Action' に変換できません
(エラー3) 引数 2: 'string'から'System.Threading.CancellationToken' に変換できません =============================================================
また,以前の質問の途中で, >Action<参照型> は Action<object> と互換性がありますが、Action<値型> は互換性がないんですね。 といったコメントも頂きました.
そこで,並列実行するメソッドの引数を,値型のint,参照型のstring,Object型を継承した自作クラスにして試してみたのですが,エラー内容がほぼ変わりませんでした.
エラー内容を見る限り, public Task( Action<Object> action, Object state ) とは違うコンストラクタが呼び出されている気がするのですが,いったい,どこに問題があるのでしょうか? 以前の質問でのアドバイスを元に考えてみたのですが,よくわかりません. どなたかアドバイスをお願いします.
|
|