如何覆盖返回任务的函数

Zap*_*ica 4 c# overriding task-parallel-library async-await

我有以下几点:

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

我想将其修改为以下内容:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能做到这一点?

Yuv*_*kov 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;
}
Run Code Online (Sandbox Code Playgroud)

因为提供的基本调用返回了一个Task<T>等待的,所以你可以等待它的异步完成async-await.

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

更多信息async-await可以在这里找到