如何覆盖返回任务的函数

时间:2015-04-18 15:24:59

标签: c# async-await task-parallel-library override

我有以下几点:

public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
    return base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);
}

我想将其修改为:

public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
    var result = base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);

    //If status was successful do some thing here
    if(result =  success)
    {
       //update last logged in time.
    }

    //Lastly return the result
    return result;
}

现在我想修改函数的功能。

我想执行基本任务,然后使用它的结果在我的重写函数中执行某些操作?

我该怎么做?

1 个答案:

答案 0 :(得分:6)

您可以通过向方法添加async关键字并等待基本操作来执行此操作:

public async override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
    var result = await base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);

    // Check result
    return result;
}

由于提供的基本调用返回了一个等待的Task<T>,您可以使用async-await等待它的异步完成。

请注意,这意味着您必须“始终保持异步”,并确保在整个callstack中正确等待呼叫。

async-await的更多内容here