値を返すタスクがありますが、その値を別のものに変換したいと考えています (たとえば、 からstring
へint
)。これは通常、非常に簡単に行うことができます。変換を行い、次のように新しい型を返す継続タスクを追加するだけです。
ConverterService converter = ...;
Task<string> originalTask = Task.Factory.FromAsync<string>(...);
Task<int> conversionTask = originalTask.ContinueWith(p => converter.Convert(typeof(string), typeof(int), p.Result));
問題は、タイプが不明であることです:(私はoriginalTaskを動的に生成することができました。これは私の頭のてっぺんからの抜粋です:
ConverterService converter = ...;
// dynamically calling Task.Factory.FromAsync
var originalTask = FromAsyncMethodInfo.Invoke(Task.Factory, args.ToArray());
...
// now I want to dynamically call Task<string>.ContinueWith
var conversionTask = ContinueWithMethodInfo.Invoke(originalTask, ???)
私は今何をしますか?Func<Task<T>, U>
(この例では実際に) を指定することを期待してFunc<Task<string>, int>
いますが、これを動的に生成するにはどうすればよいでしょうか?
物事を単純にするために、変数Func<T>
しかないときに実行時に動的に を作成する方法を知りたいだけです。Type
それか、コードの最初のブロックに見られるラムダの動的に生成された代替のいずれか:
Task<int> conversionTask = originalTask.ContinueWith(p => converter.Convert(typeof(string), typeof(int), p.Result));
よろしくお願いします。