使代码的一半异步,但保持旧代码同步

时间:2017-10-19 15:45:49

标签: c# asynchronous web async-await

我目前的任务是在API中实现一些新功能,一旦所有(图像)都传输到新系统,它将最终替换现有代码。

我有一个当前不是异步的控制器

public HttpResponseMessage GetImage(long imageId)
{
  //Old sync code
  var imageStream = GetImage(imageId);

  var response = Request.CreateResponse();

  response.Content = new StreamContent(imageStream );
  response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
  return response;
}

当然,在此方法中已有大量同步调用DB和不同的资源。

如果我使这个方法异步并在新代码中的同步代码之前返回,旧代码是否仍然以相同的方式运行并且只是同步执行?

例如:

public async Task<HttpResponseMessage> GetImage(long imageId)
{
  Stream imageStream = new MemoryStream();
  var newImage = await IsNewImage(imageId);

  if (newImage)
  {
   //Do async work
   imageStream = await GetNewImage(imageId);
  }
  else 
  {
   //Old sync code
   imageStream = GetImage(imageId);
  }

  var response = Request.CreateResponse();

  response.Content = new StreamContent(imageStream);
  response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
  return response;
}

这样做的原因是尝试最小化触摸将要消失的旧代码,并实现新代码异步。我只是想确保在其中引入异步功能不会改变现有的同步代码?我没有创建新控制器的选项,它必须是对此实例中现有控制器的更改。

0 个答案:

没有答案