我正在运行以下代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using System.Threading;
public class Program
{
public static void Main()
{
new Program().Test();
}
public async Task Test()
{
Console.WriteLine("starting...");
await Test2();
Console.WriteLine("done!");
Thread.Sleep(2*1000);
}
public async Task Test2()
{
Console.WriteLine("Task in delay...");
await Task.Delay(5000);
}
}
Run Code Online (Sandbox Code Playgroud)
我期望输出是:
starting...
task in delay...
done!
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码时,我得到:
starting...
Task in delay...
Run Code Online (Sandbox Code Playgroud)
并且程序终止。我错过了什么吗?我应该如何修改代码才能得到预期的结果?
另一个问题 - 根据我的理解,await方法中最后一行的 using 是多余的,如果我删除它,我该如何await在该方法上?
我有以下端点:
[HttpPost("Submit")]
public String post()
{
_ = _service.SubmitMetric("test", MetricType.Count, 60, 1);
return "done";
}
Run Code Online (Sandbox Code Playgroud)
以及服务实现:
public Task<HttpResponseMessage> SubmitMetric(<params>)
{
// build payload
using (var httpClient = new HttpClient())
{
return httpClient.PostAsync(<params>);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码并调用端点时,不会触发 HTTP POST。但是,如果我将代码更改为:
public async Task<HttpResponseMessage> SubmitMetric(<params>)
{
// build payload
using (var httpClient = new HttpClient())
{
return await httpClient.PostAsync(<params>);
}
}
Run Code Online (Sandbox Code Playgroud)
POST 按预期提交。为什么会发生这种情况?如果我并不真正关心 HTTP 响应,我该怎么办?我只想提交它并继续我的流程。我不应该能够在不await获取结果的情况下使用它吗?例如:
public void SubmitMetric(<params>)
{
// build payload
using (var httpClient = new HttpClient())
{
httpClient.PostAsync(<params>);
}
}
Run Code Online (Sandbox Code Playgroud)