这种即发即弃的方法是否正确

本文关键字:是否 方法 | 更新日期: 2023-09-27 18:33:16

我已经实现了instagram api实时更新。基本上,当根据我的订阅添加新图像时,他们会向我提供的 url 发出 POST 请求。

他们说:

"您应该在 2 秒的超时内确认 POST - 如果您需要对接收到的信息进行更多处理,您可以在异步任务中执行此操作。">

所以我构建了类似的东西:

    [HttpPost]
    [ActionName("realtime")]
    public async Task<ActionResult> IndexPost()
    {
        var form = Request.Form;
        Request.InputStream.Position = 0;
        System.IO.StreamReader str = new System.IO.StreamReader(Request.InputStream);
        string sBuf = str.ReadToEnd();
        // deserialize this from json
        var serializer = new JavaScriptSerializer();
        var updates = serializer.Deserialize<IEnumerable<RealtimeUpdate>>(sBuf).ToList();
        ProcessNewTaggedImages(updates);
        return new ContentResult { Content = "Ok" };
    }

ProcessNewTaggedImages正在异步运行的位置。

 public async void ProcessNewTaggedImages(List<RealtimeUpdate> updates)
        {
            Task.Run(() =>
            {
               // query Instagram api for new images
            }
        }

所以基本上当Instagram发布到 www.mysite.com/realtime 时,它不会等待ProcessNewTaggedImages

我只是想确保这种方法对于即发即弃方法是正确的,因为在 Task.Run 下,我收到一条警告,指出:

由于不等待此调用,因此在调用完成之前将继续执行当前方法。请考虑将 await 运算符应用于调用结果。

但我不想在这里等待,因为

  1. 我的处理结果对Instagram通话无关紧要
  2. 开机自检超时为 2 秒,所以我不想等待此处理。

你能确认我走在正确的轨道上吗?Ps:POST 工作正常,一切正常,只是想确认我没有做任何神秘的事情,因为我主要是 C# 中这种异步方法的初学者。

这种即发即弃的方法是否正确

如果您需要触发并忘记功能,则无需将异步关键字添加到您的方法中,因为您不会执行任何等待。因此,从代码中删除异步关键字,编译器不会抱怨您的代码。

我想你可能需要先阅读这个。

我引用:">如果异步方法不使用 await 运算符来标记挂起点,则该方法会像同步方法一样执行,尽管有异步修饰符。