Sitecore事件是否同步处理?

Sitecore事件是否同步处理?,sitecore,sitecore6,Sitecore,Sitecore6,我想钩住item:renamed事件进行一些处理。不过,这可能需要几分钟的时间。事件处理程序是异步执行还是与正常管道执行同步执行?如果我需要自己做的话,是否有一种标准的Sitecore方法来异步启动 此处理程序需要执行的唯一时间是在内容编辑器中重命名项目时。Sitecore事件同步执行。sitecoremarketplace上有一个sitecoredevelopmenttoolkit模块,其中包含异步触发事件的代码,您可以轻松地在解决方案中重用该代码 下面是他们的代码的一部分,在触发事件时异步触

我想钩住item:renamed事件进行一些处理。不过,这可能需要几分钟的时间。事件处理程序是异步执行还是与正常管道执行同步执行?如果我需要自己做的话,是否有一种标准的Sitecore方法来异步启动


此处理程序需要执行的唯一时间是在内容编辑器中重命名项目时。

Sitecore
事件同步执行。
sitecoremarketplace
上有一个
sitecoredevelopmenttoolkit
模块,其中包含异步触发事件的代码,您可以轻松地在解决方案中重用该代码

下面是他们的代码的一部分,在触发事件时异步触发方法:

public-void-onitemrename(对象发送方,事件args-args)
{
如果(args!=null)
{
var item=Event.ExtractParameter(args,0)作为项;
IsNotNull(项,“参数中没有项”);
var name=Event.ExtractParameter(args,1)作为字符串;
IsNotNullOrEmpty(name,“参数中没有名称”);
DoAsync(()=>OMRENAMEASync(项目,名称));
}
}
private void-mrenameasync(项,字符串名称)
{
var itemRef=新的ItemReference(item.Parent);
var itemRefText=itemRef.ToString();
//在这里做些工作
}

Sitecore事件是同步的。你可以作为一份工作开始你的长期任务。首先创建一个类来处理事件:

名称空间MyNamespace
{
公共类MyClass
{
已重命名的公共无效项(对象发送方、事件args args)
{
运行(“LongRenameTask”);
}
受保护的无效运行(string methodName、EventArgs args)
{
var item=Event.ExtractParameter(args,0)作为项;
var name=Event.ExtractParameter(args,1)作为字符串;
运行作业(方法名称、项、名称);
}
受保护的句柄运行作业(string methodName、Item Item、string name)
{
var选项=新作业选项(
正在为“{1}”准备重命名作业“{0}”。FormatWith(
方法名,
item.ID.ToString()),
“项目:已重命名”,
“壳”,
新项目重命名管理器(项目,名称),
方法名称)
{
WriteToLog=true,
原子执行=真,
};
var作业=新作业(选项);
JobManager.Start(作业);
返回工作。处理;
}
}
}    
然后创建一个类来完成您的工作(Sitecore将在后台线程上调用该类):

名称空间MyNamespace
{
公共类ItemRenamedManager
{
受保护项重命名项{get;set;}
受保护的字符串名称{get;set;}
公共项重命名管理器(项,字符串名称)
{
RenamedItem=项目;
名称=名称;
}
公共无效LongRenameTask()
{
//在这里完成你的长期任务。
//属性“RenamedItem”将为您提供该项
}
}
}
然后在以下位置修补事件处理程序:



上面的代码是从内存中抄袭出来的,需要一些错误处理,但应该非常接近,但这样,长时间运行的任务就不会阻塞内容编辑器UI。

如果您查看它们的DoAsync()实现,它们只调用.BeginInvoke,从技术上讲,它将在另一个线程上运行任务,但Sitecore确实有启动后台作业的机制。