这种即发即弃的方法是否正确
本文关键字:是否 方法 | 更新日期: 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 运算符应用于调用结果。
但我不想在这里等待,因为
- 我的处理结果对Instagram通话无关紧要
- 开机自检超时为 2 秒,所以我不想等待此处理。
你能确认我走在正确的轨道上吗?Ps:POST 工作正常,一切正常,只是想确认我没有做任何神秘的事情,因为我主要是 C# 中这种异步方法的初学者。
如果您需要触发并忘记功能,则无需将异步关键字添加到您的方法中,因为您不会执行任何等待。因此,从代码中删除异步关键字,编译器不会抱怨您的代码。
我想你可能需要先阅读这个。
我引用:">如果异步方法不使用 await 运算符来标记挂起点,则该方法会像同步方法一样执行,尽管有异步修饰符。