c# - 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();
非常感谢您提供的任何指导!
谢谢!
解决方案
有两件事可能值得检查:
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部件代码无论如何都会被同步调用,您是否尝试过如本文所述显式同步调用它?
推荐阅读
- google-sheets - GS 查询将一列(Last,First)拆分为 2 列
- python - PySpark:如何对数组中实际上是字符串列的字典值求和
- elasticsearch - 如何根据字段值将一个索引复制到多个索引中?
- audit-logging - 审核的排除过滤器增加了显着的延迟
- google-cloud-platform - 谷歌云计算虚拟机实例未列出
- excel - 如何使用来自 WorksheetFunction.Unique() 的值填充数组?
- mysql - 创建配方数据库时,如何将 recipe_ID 与多个成分 ID 实例链接?
- c# - 将 DataRow 与其他 DataRow 进行比较
- pandas - 如何将 seaborn 的 catplot 绘制到 gridspec
- java - 扫描仪正在跳过一行并转到下一行