如何使用API​​中提供的异步方法?

时间:2017-01-26 02:14:12

标签: c# .net asynchronous async-await synchronous

举个简单的例子,我想在数据库中显示所有用户,API提供异步方法ShowUsersAsync()

public async Task<InfluxResult<UserRow>> ShowUsersAsync()
/// SHOW all existing users and their admin status.

现在,我正在努力做到以下几点。

class MainClass
{
    public static void Main(string[] args)
    {
        var client = new InfluxClient(new Uri("http://localhost:8086"));

        **//"How do I run it here?"** TestAsync

        Console.WriteLine("PRINT ALL USERS");
    }

    public async void TestAsync(InfluxClient client)
    {
        var users = await client.ShowUsersAsync();
    }
}

我错过了关于异步和等待的事情吗?

API参考: https://github.com/MikaelGRA/InfluxDB.Client

2 个答案:

答案 0 :(得分:2)

根据OP中提供的链接文档,访问API应该在您的预期应用程序中看起来像这样。

public async Task<InfluxResult<UserRow>> TestAsync() {
    var client = new InfluxClient(new Uri("http://localhost:8086"));
    var users = await client.ShowUsersAsync();
    return users;
}

虽然OP中的简单示例使用控制台应用程序,但这里假设控制台应用程序不是最终要开发的最终系统。

但如果是这样的话,请看看这篇文章:Async Console Programs

以上代码将在您的最终程序中用作

var users = await TestAsync();

如果此时的目的仅仅是测试API,那么单元测试可能是一个很好的候选者。

[UnitTest]
public class InfluxClientTests {
    [TestMethod]
    public async Task InfluxClient_Should_Get_All_Users() {
        //Arrange        
        var client = new InfluxClient(new Uri("http://localhost:8086"));
        //Act
        var users = await client.ShowUsersAsync();

        //Assert
        //...verify expected results.
    }
}

可以在测试运行器中运行/调试测试,并且在没有控制台应用程序限制的情况下验证行为。

答案 1 :(得分:0)

你可以这样做:

TestAsync(client).Wait();