C# Umbraco在新线程中保存内容

C# Umbraco在新线程中保存内容,c#,multithreading,umbraco,umbraco7,C#,Multithreading,Umbraco,Umbraco7,我正在编写一个桌面客户端,它允许用户上传带有产品的电子表格。然后由API解析电子表格,并使用ContentService创建或更新和保存产品 由于这个过程非常慢,我的第一个解决方案是将客户端webrequest的超时设置为5分钟,但我不喜欢这个解决方案。相反,我想在另一个线程中进行创建/更新。此解决方案不起作用,因为它在使用ContentService.Save(IList)时引发ArgumentNullException 我当前代码的剪贴画: var items = parser.Parse(

我正在编写一个桌面客户端,它允许用户上传带有产品的电子表格。然后由API解析电子表格,并使用ContentService创建或更新和保存产品

由于这个过程非常慢,我的第一个解决方案是将客户端webrequest的超时设置为5分钟,但我不喜欢这个解决方案。相反,我想在另一个线程中进行创建/更新。此解决方案不起作用,因为它在使用ContentService.Save(IList)时引发ArgumentNullException

我当前代码的剪贴画:

var items = parser.Parse(); // Parse spreadsheet
new Task(() =>
{
  var products = new List<IContent>();
  for (var item in items)
  {
    if (item.IsValid())
    {
        var product = CreateOrUpdateProduct(parentId, item);
        products.Add(product);
    }
  }
  ApplicationContext.Current.Services.ContentService.Save(products);
).Start();
var items=parser.Parse();//分析电子表格
新任务(()=>
{
var products=新列表();
for(项目中的var项目)
{
if(item.IsValid())
{
var product=CreateOrUpdateProduct(父项ID,项);
产品。添加(产品);
}
}
ApplicationContext.Current.Services.ContentService.Save(产品);
).Start();

有可能做到这一点吗?

好的,您可以使用…它允许您在等待任务的同时在后台线程上执行任务。当任务完成时,句柄将返回到方法并执行其剩余部分。@fabjan,该解决方案是否仍然使客户端等待任务完成?不是真的,它是由服务器端的状态机等待的,但客户端的UI线程被释放了,所以UI并没有冻结。从客户端的角度来看,他点击了一些按钮,从应用程序得到了一些即时响应。