System.Threading.Tasks.Task生成SPException

时间:2016-06-29 07:14:41

标签: c# multithreading sharepoint

在我的代码中使用System.Threading.Tasks.Task时,我得到以下异常:

  

SPException:尝试在单线程模式下对多个线程进行调用。 (来自HRESULT的异常:0x80010102(RPC_E_ATTEMPTED_MULTITHREAD))

请指出生成此异常的所有情况。

1 个答案:

答案 0 :(得分:0)

每个上下文只能运行一个线程。如果需要多线程SharePoint对象,可以使用以下剪切作为参考:

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <title>Log Analysis Web APP</title>
    <link rel="stylesheet" type="text/css" href="/public/stylesheets/style.css">
  </head>
  <body>
    <h1>Text Example</h1>
  </body>
</html>

然后,您可以执行调用扩展名的操作,例如:

public static class SPListItemContextIsolatedExtension 
{
    public static SPListItem Isolate(SPListItem item)
    {
        var parentWeb = item.ParentList.ParentWeb.Url;
        var site = new SPSite(parentWeb);
        var web = site.OpenWeb();
        return web.GetListItem($"{parentWeb}/{item.Url}");
    }

    public static void RunIsolated(this SPListItem item, Action<SPListItem> act)
    {
        Task.Factory.StartNew(() => act(item.Isolate()));
    }
}

可能还有其他几种方法可以进行隔离,上面的代码只是一个例子。