我正在使用本文中描述的方法在 C#4 中使用迭代器在此处使用迭代器在不使用 C#5 的情况下尽可能接近地复制 usingasync
和关键字。await
我偶然发现了一个问题,我认为该问题与GetResponseAsync()
在 C#5 中使用时似乎常见的问题相同,请参阅问题,因为每当我尝试使用等效的扩展方法yield return
时,我的IEnumerable<Task>
. 我没有ConfigureAwait(false)
可用的方法。
谁能看到解决这个问题的方法?
我的代码:
/// <summary>
/// Processes the image.
/// </summary>
/// <param name="context">
/// the <see cref="T:System.Web.HttpContext">HttpContext</see>
/// object that provides references to the intrinsic server objects
/// </param>
private /*async*/ void ProcessImageAsync(HttpContext context)
{
this.ProcessImageAsyncTask(context).ToTask();
}
/// <summary>
/// Processes the image.
/// </summary>
/// <param name="context">
/// the <see cref="T:System.Web.HttpContext">HttpContext</see>
/// object that provides references to the intrinsic server objects
/// </param>
/// <returns>
/// The <see cref="IEnumerable{Task}"/>.
/// </returns>
private IEnumerable<Task> ProcessImageAsyncTask(HttpContext context)
{
// Code ommited that works out the url
Uri uri = new Uri(path);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
Task<WebResponse> responseTask = webRequest.GetResponseAsync();
//################################################################//
//The method appears to be jumping out of the method here on yield
//################################################################//
yield return responseTask;
// Code that runs other tasks
yield break;
}
我将相关的扩展方法添加为 Github Gist以使问题更具可读性。