从Task <authenticationresult>转换为AuthenticationResult

时间:2018-01-10 09:21:57

标签: c# .net asynchronous task-parallel-library

我有一个结果:

var authResult = DoSomething

它返回任务

  

如何转换:任务到AuthenticationResult

此AuthenticationResult我必须将类方法作为参数传递。

Class1 A = new Class1()

A.Method1(AuthenticationResult)

2 个答案:

答案 0 :(得分:0)

您始终可以T撰写Task<T>

var task = DoSomething(); // type Task<T>
var result = task.Result; // type T

如果DoSomething()允许,您可以使用async / await模式:

var result = await DoSomethong(); // type T

答案 1 :(得分:0)

如果无法使用async/await关键字,请考虑通过延续机制直接使用TPL(任务并行库)。

Class1 A = new Class1();

Task<AuthenticationResult> authenticationTask = DoSomething();

// Register an Action<Task<T>> to run when the task has transitioned RanToCompletion 
// or Faulted
authenticationTask.ContinueWith(p =>
{
    if(p.IsFaulted) // Handle any exceptions!
    {
        Exception ex = p.Exception
    }
    else
    {
        // Success! :D Process the result as usual.
        // Task<T>.Result is an instance of T - in our case, AuthenticationResult. 
        // It would be default(T) if a task has faulted or has not completed. 
        // At this point, we are confident that the task has completed without a fault.
        A.Method1(p.Result);
    }
});

这里的缺点是,如果没有更多的管道,你将无法从此方法返回最终值。 async/await为您完成所有这些,但这是可以实现的。您也不会在原始线程上运行guarentees(在UI场景中通常需要),但这也是可以实现的。您可以在另一个问题中找到这些问题的答案。