我正在尝试执行一个接受一种模型参数并执行一些操作的操作,然后返回相同模型参数的类型。
模型在外部DLL中定义,无法修改。
我目前正在尝试通过
实现功能private async Task<Model1> ExecuteTask(Task<Model1> model)
{
//perform some action
}
private async Task<Model2> ExecuteTask(Task<Model2> model)
{
//perform some action
}
private async Task<Model3> ExecuteTask(Task<Model3> model)
{
//perform some action
}
有没有通用的方法来做到这一点?
答案 0 :(得分:1)
您可以创建一个通用函数/类来保存实现,但是它们来自同一个抽象/基类basemodel
public async T ExecuteTask<T>(T s) where T : Task<BaseModel>
{
// perform some actions.
}
答案 1 :(得分:0)
如果这些模型不是从公共基类继承而且没有实现相同的接口,那么就不会有一个&#34; neat&#34; (我知道)这样做的方式。您可以创建一个接受Object
的函数,然后您可以尝试将其强制转换为其中一个模型,但返回值将再次为Object
。
答案 2 :(得分:-1)
找出解决方案
private const int RequestTimeoutInMilliseconds = 10000;
public async Task<T> ExecuteTask<T>(this Task<T> task)
{
if (await Task.WhenAny(task, Task.Delay(RequestTimeoutInMilliseconds)).ConfigureAwait(false) == task)
{
return task.Result;
}
throw new OperationCanceledException(typeof(T) + " Task failed");
}
拨打电话
var task = client.ApiAsync();
var responseResult = task.ExecuteTask().Result
更新:我不确定为什么这个答案收到了一个downvote。我们的想法是不关心模型的类型,只是在不了解模型类型的情况下执行任务。