如何使用异步和等待技术编写函数

本文关键字:函数 技术 等待 何使用 异步 | 更新日期: 2024-10-25 08:59:01

我想运行一个写入 WPF 中文本块的 void 函数

private async Task<int> TASK_ClickthroughBuild(string server, int frame, int click)
{
    if (server == "value")
    {
        CreativeCode.Inlines.Add(openScript + newLine);
        CreativeCode.Inlines.Add("var " + click + " = '%%CLICK_URL_ESC%%%%DEST_URL%%';" + newLine);
        CreativeCode.Inlines.Add("var " + frame + " = document.getElementById('" + frame + "');" + newLine);
        CreativeCode.Inlines.Add(frame + ".href = " + click + ";" + newLine);
        CreativeCode.Inlines.Add(closeScript);
        PASSBACKframeINT = frame;              
    }
    return PASSBACKframeINT;
}

上面的函数返回一个整数值并将代码写入文本块。

这是第二个函数。

private async Task clickElementBuild()
{
    CreativeCode.Inlines.Add("<a href='#' id='" + PASSBACKframeINT + "' target='_blank' class='" + PASSBACKwrapINT + "' >" + newLine);
    CreativeCode.Inlines.Add("<div class='" + PASSBACKblockINT + "' id='" + overlayINT + "'></div>" + newLine);
}
第二个函数,代码需要在第一个函数

上面写出textblock代码,但要靠第一个函数的返回值才能正确编写。

所以我需要以异步格式编写它。 我可以有指针或更好的方法来做到这一点吗?

谢谢

如何使用异步和等待技术编写函数

我假设您使用的是.NET 4.5,否则您会选择线程解决方案。

调用异步函数基本上是告诉主线程将所有内容传递给后台线程。

由于调用异步函数,因此存在"软数据一致性的风险"。就像在你的情况下,或者更简单的话说,Forms.show()和Forms.showDialog()的类比。

有几种方法可以绕过这一点。线程使用 JOIN() 或 WAITALL() 解决了这个问题并与System.Threading.Thread.Sleep(x)或某些人更喜欢Application.DoEvents()异步

您可以在代码上方放置一个等待后台任务子句,该子句存在"软数据一致性"的风险,或将其代码放在主线程中。

如果您不熟悉异步函数。我推荐本教程使用它。

https://visualstudiomagazine.com/articles/2014/06/01/how-to-simplify-asynchronous-programming.aspx

排序。基本上,返回值并使用异步首先等待返回的值。