我已经实现了 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
.
我只是想确保这种方法对于 fire and forget 方法是正确的,因为在 Task.Run 下我收到一条警告说:
由于不等待此调用,因此在调用完成之前继续执行当前方法。考虑将 await 运算符应用于调用结果。
但我不想在这里等待,因为
- 我的处理结果与 instagram 调用无关
- POST 的超时时间是 2 秒,所以我不想等待这个处理。
你能确认我在正确的轨道上吗?Ps:POST 工作正常,一切正常,只是想确认我没有做任何 mystake,因为我主要是 C# 中这种异步方法的初学者。