我在一个单独的项目中有一个异步任务,我需要从另一个项目调用但我不知道如何实现它。
异步方法是
public async Task<int> InsertNewPasswordResetRequest(UserPasswordReset upr)
{
string commandText = "Insert Into passwordresetrequests (reset_username, ResetToken, ResetRequestTime, ResetRequestTimeout) values(@username,@rt,@rrt,@rrtout);";
var parameters = new Dictionary<string, object>() {
{ "@username", upr.ResetUsername },
{ "@rt", upr.ResetToken },
{ "@rrt", upr.ResetRequestTime },
{ "@rrtout", upr.ResetRequestTimeout }
};
return await Task.FromResult( _database.Execute(commandText, parameters, false));
}
我试图从另一个项目中调用它
Dim success As Integer = prr.InsertNewPasswordResetRequest(upr).FromResult()
我知道它返回一个任务但是如何从中提取int值?
答案 0 :(得分:2)
推荐的方法是await
InsertNewPasswordResetRequest
方法的结果。您还可以在返回的Result
上调用Task<int>
属性,但如果您在同步上下文中执行,则可能导致代码阻塞。
int result = await InsertNewPasswordResetRequest(...);
附加说明:该方法无需await Task.FromResult
。只需从方法签名和async
关键字中删除await
修饰符,然后直接返回Task.FromResult
。
另外需要注意:如果可能,请考虑完全使用InsertNewPasswordResetRequest
非异步,因为它不会执行任何异步代码。
编辑VB.NET调用代码:
Dim result As Integer = Await InsertNewPasswordResetRequest(...)
答案 1 :(得分:1)
如果要运行async
,可以等待任务Dim success As Integer = Await prr.InsertNewPasswordResetRequest(upr)
或以
同步运行任务Dim success As Integer = prr.InsertNewPasswordResetRequest(upr).Result