asp.net чат на основе обратных вызовов - PullRequest
0 голосов
/ 29 февраля 2012

Я новичок в асинхронном программировании

Я прочитал статью о чате на node.js и попытался добиться чего-то похожего с асинхронным контроллером asp.net mvc

public void RecieveAsync()
{
    var list = (List<AsyncCallback>)HttpContext.Application["callbacks"];

    var tt = new AsyncCallback((message) =>
            { 
                AsyncManager.Parameters["result"] = message; 
            }); 
    list.Add(tt);
    HttpContext.Application["callbacks"]=list;

    while(!AsyncManager.Parameters.ContainsKey("result"))
    {
        System.Threading.Thread.Sleep(500);
    }

}

public JsonResult RecieveCompleted(Message result)
{
        var a = new { name = result.name, result.message };
    return Json(a, JsonRequestBehavior.AllowGet);
}

public void SendAsync(Message _message)
{
    Dictionary<string,object> dict= new Dictionary<string,object>();
    var list = (List<AsyncCallback>)HttpContext.Application["callbacks"];
    foreach (var elem in list)
    {
        elem.Invoke(_message);
    }
    HttpContext.Application["callbacks"] = new List<AsyncCallback>();
    dict.Add("ok",true); 
    AsyncManager.Parameters["result"] = dict;
}

public JsonResult SendCompleted(object result)
{    
    return Json(result, JsonRequestBehavior.AllowGet); 
}

он работает, но все еще с этой строкой:

while(!AsyncManager.Parameters.ContainsKey("result"))
{
System.Threading.Thread.Sleep(500);
}

это не совсем асинхронно, что еще я могу сделать, как я могу достичь этого без сна и сделать мой код более понятным с той же логикой?

1 Ответ

0 голосов
/ 29 февраля 2012

Вместо того, чтобы пытаться написать много шаблонного кода, почему бы не использовать Задачи ?То есть, если вы используете .Net 4.0.Это упростит многое из того, что вы делаете, и я настоятельно рекомендую изучить это, если это вариант для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...