从异步任务中检索int值

时间:2014-01-31 17:44:12

标签: vb.net asynchronous task

我在一个单独的项目中有一个异步任务,我需要从另一个项目调用但我不知道如何实现它。

异步方法是

 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值?

2 个答案:

答案 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