我有一个返回值的任务,但我想将该值转换为其他值(例如, from string
to 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
变量时如何在运行时动态创建一个。或者是第一个代码块中看到的 lambda 的动态生成替代方案:
Task<int> conversionTask = originalTask.ContinueWith(p => converter.Convert(typeof(string), typeof(int), p.Result));
提前谢谢了。