这种火灾和遗忘方法是否正确?

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

他们说:

“你应该在2秒的超时内确认POST – 如果你需要对收到的信息做更多的处理,你可以在异步任务中这样做。”

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

[HttpPost] [ActionName("realtime")] public async Task 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>(sBuf).ToList(); ProcessNewTaggedImages(updates); return new ContentResult { Content = "Ok" }; } 

ProcessNewTaggedImages正在运行异步。

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

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

我只是想确保这种方法对于fire and forget方法是正确的,因为在Task.Run下我收到一条警告说:

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

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

  1. 我的处理结果对于instagram电话无关紧要
  2. POST的超时是2秒,所以我不想等待这个处理。

你能证实我走在正确的轨道上吗? Ps:POST工作正常,所有工作都很好,只是想确认我没有做任何mystake,因为我主要是初学者在C#中的这种异步方法。

如果您需要火灾并忘记function,则不需要在方法中添加异步关键字,因为您没有等待任何等待。 因此,从代码中删除异步关键字,编译器不会抱怨您的代码。

我想你可能需要首先阅读 。

我引用: “如果异步方法不使用await运算符来标记挂起点,则该方法将作为同步方法执行,尽管存在异步修饰符。”