首页 > 解决方案 > Kentico - AsyncWorker(运行任务)

问题描述

我们有一个与第三方服务交互的 Kentico CMSAbstractWebPart。该服务过去使用 SOAP,但已迁移到 JSON(因此现在是异步的)。

我们所有的低级命令都是 Task 类型。为了在 Kentico 之外执行它们,我们调用调用:

Task.Run(async () => { await task; });

但是,当在 Kentico 内部时,这将导致 UI 死锁。我们正在尝试使用 Kentico 的 AsyncWorker,但找不到正确的方法/参数。

这是我们正在尝试的示例:

AsyncWorker worker = new AsyncWorker();
worker.RunAsync(task, System.Security.Principal.WindowsIdentity.GetCurrent());
worker.WaitForFinish();

非常感谢您提供的任何指导!

谢谢!

标签: c#async-awaitkentico

解决方案


有两件事可能值得检查:

1) 检查 \Web\CMS\CMSPages\PortalTemplate.aspx 文件,使其在页面上应包含 Async="true" 属性:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="CMSPages_PortalTemplate" Async="true"
ValidateRequest="false" MaintainScrollPositionOnPostback="true" EnableEventValidation="false"
Codebehind="PortalTemplate.aspx.cs" %>

2)无论如何,您的Web部件代码无论如何都会被同步调用,您是否尝试过如本文所述显式同步调用它?


推荐阅读