如何使用 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 的内容?
你可以这样做:
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 并且在没有控制台应用程序限制的情况下验证行为。
作为一个简单的例子,我想显示一个数据库中的所有用户,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 的内容?
你可以这样做:
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 并且在没有控制台应用程序限制的情况下验证行为。