你如何设置它们?
如果我在HttpModule中有以下代码。
在使用
然后使用以下方式进行访问。
我得到了以下错误。
异步模块或处理程序在仍有异步操作挂起时完成。
编辑
好的,在看到所有这些答案之前,我通过如下方式触发事件处理程序来避免抛出错误。
如果我在HttpModule中有以下代码。
public static event EventHandler<PostProcessingEventArgs> OnPostProcessing;
在使用
EventHandlerTaskAsyncHelper
设置异步PostAuthorizeRequest
任务时。// Fire the post processing event.
EventHandler<PostProcessingEventArgs> handler = OnPostProcessing;
if (handler != null)
{
handler(this, new PostProcessingEventArgs { CachedPath = cachedPath });
}
然后使用以下方式进行访问。
ProcessingModule.OnPostProcessing += this.WritePath;
private async void WritePath(object sender, PostProcessingEventArgs e)
{
await Task.Factory.StartNew(() => Debug.WriteLine(e.CachedPath));
}
我得到了以下错误。
异步模块或处理程序在仍有异步操作挂起时完成。
编辑
好的,在看到所有这些答案之前,我通过如下方式触发事件处理程序来避免抛出错误。
EventHandlerTaskAsyncHelper postProcessHelper =
new EventHandlerTaskAsyncHelper(this.PostProcessImage);
context.AddOnPostRequestHandlerExecuteAsync(postProcessHelper.BeginEventHandler,
postProcessHelper.EndEventHandler);
private Task PostProcessImage(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
object cachedPathObject = context.Items[CachedPathKey];
if (cachedPathObject != null)
{
string cachedPath = cachedPathObject.ToString();
// Fire the post processing event.
EventHandler<PostProcessingEventArgs> handler = OnPostProcessing;
if (handler != null)
{
context.Items[CachedPathKey] = null;
return Task.Run(() => handler(this,
new PostProcessingEventArgs { CachedImagePath = cachedPath }));
}
}
return Task.FromResult<object>(null);
}
从我下面所看到的来看,这似乎是不明智的。
这个事件处理程序的单一目的是允许某人在文件上运行更长时间的任务,例如使用像jpegtran或pngout之类的东西对图像进行后处理以进一步优化它。 最好的方法是什么?