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

How do I use an async method provided in an API?

作为一个简单的例子,我想显示一个数据库中的所有用户,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();
    }
}

我是否遗漏了有关 async 和 await 的内容?

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

你可以这样做:

TestAsync(client).Wait();

根据 OP 中提供的 link 文档,访问 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.
    }
}

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