通用异步函数来处理不同的模型

时间:2017-03-05 02:37:19

标签: c# polymorphism

我正在尝试执行一个接受一种模型参数并执行一些操作的操作,然后返回相同模型参数的类型。

模型在外部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
}

有没有通用的方法来做到这一点?

3 个答案:

答案 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。我们的想法是不关心模型的类型,只是在不了解模型类型的情况下执行任务。