我有一个结果:
var authResult = DoSomething
它返回任务
如何转换:任务到AuthenticationResult
此AuthenticationResult我必须将类方法作为参数传递。
Class1 A = new Class1()
A.Method1(AuthenticationResult)
答案 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场景中通常需要),但这也是可以实现的。您可以在另一个问题中找到这些问题的答案。