如何覆盖 returns 任务的函数

How to override a function that returns a task

我有以下功能:

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;
}

现在我想修改函数的作用。

我想执行基本任务,然后使用它的结果在我的覆盖函数中做一些事情?

我该怎么做?

您可以通过向方法添加 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;
}

因为提供的碱基调用 returns a Task<T> 是可等待的,您可以使用 async-await.

等待它的异步完成

请注意,这意味着您必须 "async all the way" 并确保在整个调用堆栈中正确等待调用。

可以找到有关 async-await 的更多信息 here