举个简单的例子,我想在数据库中显示所有用户,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();
}
}
我错过了关于异步和等待的事情吗?
答案 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();