gpt4 book ai didi

c# - 如何以与在多线程 Web 应用程序中生成的顺序相同的顺序显示查询结果?

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:27 24 4
gpt4 key购买 nike

我问了here有关在简单的 ASP.NET Windows 窗体小程序中使用多线程以使搜索运行得更快的一些帮助,并得到了一些很好的答案。然而,由于在此应用程序上使用线程(并且没有太多经验),我遇到了许多新的设计问题。

我编写了一个简单的小程序,它向第三方网站发送 POST 请求以使用其搜索栏,然后返回从页面上的字符串中提取的整数,指示为给定搜索词找到了多少结果.

public partial class _Default : System.Web.UI.Page
{
private NlSearch search;
private static List<SearchResult> resultsList = new List<SearchResult>();

protected void Page_Load(object sender, EventArgs e)
{
search = new NlSearch();
}

protected void AddSearchMethod(object sender, EventArgs e)
{
var text = SearchForm.Text;
Task task = Task.Factory.StartNew(() => MakeRequest(text));
task.Wait();

resultsLabel.Text = "";
foreach (var v in resultsList)
{
resultsLabel.Text += v.SearchTerm + ": " + v.Count + " occurances<br/>";
}
}

protected void ClearSearchMethod(object sender, EventArgs e)
{
resultsLabel.Text = "";
resultsList.Clear();
}

protected void MakeRequest(string text)
{
SearchResult s = new SearchResult
{
SearchTerm = text,
Count = 0
};
resultsList.Add(s);
s.Count = search.MakeRequests(text);
}
}

AddSearchMethod 和 ClearSearchMethod 对应于“添加搜索”和“清除搜索”按钮,并与 SearchForm 文本字段和 resultLabel 标签交互。

期望的行为是:

  1. 客户端可以在 SearchForm 字段中输入单个搜索词,提交,应用程序将运行搜索,将结果添加到 resultsList 列表,然后将列表的内容写入 resultsLabel,按预期工作。

  2. 我希望客户能够在 SearchForm 中提交任意数量的搜索词,然后将这些词按生成的顺序写入列表。 HTTP 请求的响应很慢,这大大提高了可用性。

我在 #2 中遇到了很多问题。在收到响应之前,您可以提交任意数量的搜索词,但响应速度非常慢,而且似乎随着请求的数量而增加,这表明它们不是同时运行的。这也无法保留顺序,因此如果我按顺序输入搜索词“1990”“1991”1992“1993”,它们将按收到响应的顺序显示,而不是按响应的顺序显示。

我不太了解网络应用程序的线程,我不确定如何解决这些问题。

编辑:似乎也有一些请求丢失。例如,如果我按顺序输入“boston1”到“boston10”,则输出为

boston1: 302 occurances
boston3: 265 occurances
boston2: 227 occurances
boston: 10220056 occurances
boston7: 389 occurances
boston10: 109 occurances

最佳答案

只需使用排序列表并使用静态请求 ID 号跟踪您的请求。

private static SortedList<long, SearchResult> resultsList = new SortedList<long, SearchResult>();
...
foreach (var v in resultsList.Values)
{
...
public static long RequestID = 0;
protected void MakeRequest(string text)
{
SearchResult s = new SearchResult
{
SearchTerm = text,
Count = 0
};
resultsList.Add(System.Threading.Interlocked.Increment(ref RequestID), s);

关于c# - 如何以与在多线程 Web 应用程序中生成的顺序相同的顺序显示查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com