elasticsearch,async-await,Asp.net Web Api,elasticsearch,Async Await" /> elasticsearch,async-await,Asp.net Web Api,elasticsearch,Async Await" />

Asp.net web api 异步和等待';不能在web api上工作

Asp.net web api 异步和等待';不能在web api上工作,asp.net-web-api,elasticsearch,async-await,Asp.net Web Api,elasticsearch,Async Await,我试图在我的异步方法上使用wait,但它不起作用。我在调用post方法时输入了2个参数数组,只插入了最后一个 到数据库(我使用Elasticsearch作为数据库,因此当_id相同时,文档将替换为新文档)。我发现当insert还没有完成时,程序已经运行来查询数据库,结果是0,所以它是再次insert而不是update。 我已经在我的程序中添加了wait,但没有成功。有人能帮我解决这个问题吗?谢谢 这是我的密码 // POST api/values [HttpPost] publ

我试图在我的异步方法上使用wait,但它不起作用。我在调用post方法时输入了2个参数数组,只插入了最后一个 到数据库(我使用Elasticsearch作为数据库,因此当_id相同时,文档将替换为新文档)。我发现当insert还没有完成时,程序已经运行来查询数据库,结果是0,所以它是再次insert而不是update。 我已经在我的程序中添加了wait,但没有成功。有人能帮我解决这个问题吗?谢谢

这是我的密码

 // POST api/values
    [HttpPost]
    public async Task<AvatarModel.AvatarResponse> Post(MultiLanguageTemp[] LangTemp)
    {

        //process param to multilanguage model
        AvatarModel.AvatarResponse Resp = new AvatarModel.AvatarResponse();
        try
        {
            for (int i = 0; i < LangTemp.Length; i++)
            {
                string Type = LangTemp[i].Type;
                if ("ErrorCode".Equals(Type))
                {


                }
                else
                {
                    string GetLabelId = LangTemp[i].LabelId;
                    string GetTranslation = LangTemp[i].Translation;

                    MultiLanguage Lang = new MultiLanguage();
                    Lang.Type = LangTemp[i].Type;
                    Lang.Site = LangTemp[i].Site;
                    Lang.Language = LangTemp[i].LangId;
                    Lang.Source = LangTemp[i].Source;
                    Lang.TranslationList = new Dictionary<string, string>();
                    Lang.TranslationList.Clear();
                    Lang.TranslationList.Add(GetLabelId, GetTranslation);



                    //search elasticsearch first using id TYPE+SITE+LANG_ID+SOURCE

                    string ESResponse = await GetMultiLangAsync(Lang);
                    JObject GetResp = JObject.Parse(ESResponse);


                    //get elasticsearch Hits count
                    JToken GetHitsTotal = GetResp.SelectToken("hits.total");
                    int Hits = int.Parse(GetHitsTotal.ToString());

                    // if id exist then do update else do insert
                    if (Hits > 0)
                    {
                         string ResponseUpdate = await UpdateMultiLangAsync(GetLabelId, GetTranslation,Lang);

                      if (!ResponseUpdate.ToString().ToUpper().Contains("ERROR"))
                        {
                            Resp.Result = "0000000";
                            Resp.Message = "Update MultiLanguage Info is Success";
                        }
                        else
                        {
                            Resp.Result = "9000003";
                            Resp.Message = "Update MultiLanguage Info into ES failed";
                        }
                    }
                    else
                    {
                        //tasks.Add(InsertMultiLangAsync(Lang));

                        //insert new document into elasticsearch
                        string InsertESResponse = await InsertMultiLangAsync(Lang);
                        if (!InsertESResponse.ToUpper().Contains("ERROR"))
                        {
                            Resp.Result = "0000000";
                            Resp.Message = "Insert MultiLanguage Info is Success";
                        }
                        else
                        {
                            Resp.Result = "9000003";
                            Resp.Message = "Insert MultiLanguage Info into ES failed";
                        }
                    }
                }

            }

        }
        catch (Exception E)
        {
            Resp.Result = "9000005";
            Resp.Message = E.Message.ToString();
        }
        return Resp;
    }

    public async Task<string> GetMultiLangAsync(MultiLanguage Lang)
    {
        var Client = new HttpClient();
        Client.BaseAddress = new Uri("http://localhost:9200/multilanguage/MultiLangInfo/");
        Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var Query = "{\"query\": {\"match\": {\"_id\":\"" + Lang.Type + Lang.Site + Lang.Language + Lang.Source + "\"}}}";
        var StringContent = new StringContent(Query, Encoding.UTF8, "application/json");
        var Response =  Client.PostAsync("_search", StringContent).Result.Content.ReadAsStringAsync();

        //JObject GetResp = JObject.Parse(Response.Result);
        return await Response;
    }

    public async Task<string> InsertMultiLangAsync(MultiLanguage Lang)
    {
        var Client = new HttpClient();
        Client.BaseAddress = new Uri("http://localhost:9200/multilanguage/");
        Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var JsonTextMultiLang = JsonConvert.SerializeObject(Lang, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
        var StringContent = new StringContent(JsonTextMultiLang, Encoding.UTF8, "application/json");
        var ResponseInsert = Client.PostAsync("MultiLangInfo/" + Lang.Type + Lang.Site + Lang.Language + Lang.Source, StringContent).Result.Content.ReadAsStringAsync();

        return await ResponseInsert;
    }

    public async Task<string> UpdateMultiLangAsync(string GetLabelId,string GetTranslation, MultiLanguage Lang)
    {
        var UpdateES = "{\"doc\":{\"TranslationList\":{\"" + GetLabelId + "\":\"" + GetTranslation + "\"}},\"detect_noop\":true}";

        var Client = new HttpClient();
        Client.BaseAddress = new Uri("http://localhost:9200/multilanguage/MultiLangInfo/" + Lang.Type + Lang.Site + Lang.Language + Lang.Source + "/");
        Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var StringContent = new StringContent(UpdateES, Encoding.UTF8, "application/json");
        var ResponseUpdate = Client.PostAsync("_update", StringContent).Result.Content.ReadAsStringAsync();
        return await ResponseUpdate;
    }
//发布api/值
[HttpPost]
公共异步任务Post(MultiLanguageTemp[]LangTemp)
{
//进程参数到多语言模型
AvatarModel.AvatarResponse Resp=新的AvatarModel.AvatarResponse();
尝试
{
对于(int i=0;i0)
{
string ResponseUpdate=Wait UpdateMultiLangAsync(GetLabelId,GetTranslation,Lang);
如果(!ResponseUpdate.ToString().ToUpper()包含(“错误”))
{
Resp.Result=“0000000”;
Resp.Message=“更新多语言信息成功”;
}
其他的
{
Resp.Result=“9000003”;
Resp.Message=“将多语言信息更新到ES失败”;
}
}
其他的
{
//添加(InsertMultiLangAsync(Lang));
//将新文档插入elasticsearch
string InsertESResponse=等待InsertMultiLangAsync(Lang);
如果(!InsertESResponse.ToUpper()包含(“错误”))
{
Resp.Result=“0000000”;
Resp.Message=“插入多语言信息成功”;
}
其他的
{
Resp.Result=“9000003”;
Resp.Message=“将多语言信息插入ES失败”;
}
}
}
}
}
捕获(例外E)
{
Resp.Result=“9000005”;
Resp.Message=E.Message.ToString();
}
返回响应;
}
公共异步任务GetMultiLangAsync(多语言语言)
{
var Client=新的HttpClient();
Client.BaseAddress=新Uri(“http://localhost:9200/multilanguage/MultiLangInfo/");
Client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var Query=“{\'Query\':{\'match\':{\''u id\':\”“+Lang.Type+Lang.Site+Lang.Lang.Language+Lang.Source+“\'}}”;
var StringContent=新的StringContent(Query,Encoding.UTF8,“application/json”);
var Response=Client.PostAsync(“_search”,StringContent).Result.Content.ReadAsStringAsync();
//JObject GetResp=JObject.Parse(Response.Result);
返回等待响应;
}
公共异步任务InsertMultiLangAsync(多语言语言)
{
var Client=新的HttpClient();
Client.BaseAddress=新Uri(“http://localhost:9200/multilanguage/");
Client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var JsonTextMultiLang=JsonConvert.SerializeObject(Lang,Formatting.None,新的JsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore});
var StringContent=newstringcontent(JsonTextMultiLang,Encoding.UTF8,“application/json”);
var ResponseInsert=Client.PostAsync(“MultiLangInfo/”+Lang.Type+Lang.Site+Lang.Lang.Lang+Lang.Source,StringContent”).Result.Content.ReadAsStringAsync();
返回等待响应输入;
}
公共异步任务UpdateMultiLangAsync(字符串GetLabelId、字符串GetTranslation、多语言语言语言)
{
var UpdateES=“{\'doc\”:{\'TranslationList\”:{\'+GetLabelId+“\”:\'+GetTranslation+“\”},\'detect\u noop\”:true}”;
var Client=新的HttpClient();
Client.BaseAddress=新Uri(“http://localhost:9200/multilanguage/MultiLangInfo/“+Lang.Type+Lang.Site+Lang.Lang.Lang+Lang.Source+”/”;
Client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var StringContent=newstringcontent(UpdateES,Encoding.UTF8,“application/json”);
var ResponseUpdate=Client.PostAsync(“\u update”,StringContent).Result.Content