如何使用异步和等待技术编写函数
本文关键字:函数 技术 等待 何使用 异步 | 更新日期: 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
排序。基本上,返回值并使用异步首先等待返回的值。