小编Muh*_*een的帖子

了解异步方法中的“await”用法

我正在运行以下代码:

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在该方法上?

c# async-await

2
推荐指数
1
解决办法
191
查看次数

发布 HTTP 请求而不等待结果

我有以下端点:

[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)

c# async-await

2
推荐指数
1
解决办法
2632
查看次数

标签 统计

async-await ×2

c# ×2