c#等待回调句柄

本文关键字:句柄 回调 等待 | 更新日期: 2023-09-27 18:01:29

我有一个问题与我的一些方法,我认为,一个WaitHandle是解决方案。

我通过Ticketsystem的API创建了一个事件。

private void create_Incident(string computer_idn, string swidn_choice, 
string swName_choice, string CI_Number, String windows_user)
{
    string msg_id = "" + computer_idn + "_" + swidn_choice + "";
    string username = "BISS";
    hajas211ilt3.ILTISAPI api = new hajas211ilt3.ILTISAPI();
    api.BeginInsertIncident(username, "", msg_id, "", "", "2857", 
    "BISS - Software Deployment", "", "", "NOT DETERMINED",
    "", "", "", "", "", "", "5 - BAU", "3 - BAU", "", 
    "Interface", "", "", "", "", "", "", 
    delegate(IAsyncResult r) 
    { InsertIncidentCallback(api, r, username, msg_id); }, null);
}

此方法在create_Incident方法中作为回调调用。

private void InsertIncidentCallback(server3.ILTISAPI api, IAsyncResult result,
 string username, string msg_id)
{
    api.EndInsertIncident(result, out message);
}

我需要if中的消息,但我需要安全,有消息。所以我必须等待InsertIncidentCallback和消息。

在另一个方法中,我询问消息是否为ok:

private void checkIncident(string omputer_idn, string swidn_choice, 
                           string swName_choice, string CI_Number, 
string windows_user)
    {
        if (message == null)
        {
            string responseXML;
            api.REMEDY_ReadResponseXML(username, out responseXML, out msg_id);
            XDocument doc = XDocument.Parse(responseXML);
            inquiryId = (string)doc.Root.Element("inquiry_id");
            if (inquiryId == null || inquiryId == "")
            {
                information_text.Text = ".....";
            }
            else
            {
                information_remedyID.Visible = true;
                information_remedyID.Text = inquiryId;
                create_LanDesk(computer_idn, swidn_choice, 
                swName_choice, inquiryId);
            }
        }
        else
        {
            information_text.Visible = true;
            information_text.Text = "....";
        }
    }

如何实现回调的WaitHandle ?在这种情况下,waihandle是正确的选择吗?

c#等待回调句柄

在你的AppPool线程上使用WaitHandle,从而导致它们无限期地等待,这会很快使你的服务器崩溃。

别这么做。

你可以在网上使用几种替代方法来解决这个问题。

当您发送此回复时,您可以向用户显示一条消息说"正在处理"。

当你收到响应时,将结果存储在异步调用上,你可以使用SignalR这样的框架将其推送给用户。

或者您可以将结果存储在Session变量中,并使用UpdatePanel在间隔后刷新并显示状态。