0

私は以下のコードを持っています.ApiClassのawaitステートメントは、各api.GetResultFromAnotherServiceが終了する前に関数「AControllerMethodInAspMVC」を早く返すように見えます.

すべての子スレッドが終了する前に、メイン スレッドが返されます。この問題を解決する方法はありますか?

        private ApiClass api = new ApiClass();

        [HttpPost]
        public Task<JsonResult> AControllerMethodInAspMVC()
        {
            var arrayOfItem =  …; 

           List<object> resultObjs = new List<object>();
            var resultLock = new SemaphoreSlim(1);

            Parallel.ForEach(
                arrayOfItem,
                async item =>
                {
                    var result = await api.GetResultFromAnotherService(item.id);

                    var resultObj = new {
                    // prepare resultObj from result
                    };
                    await resultLock.WaitAsync();
                    resultObjs.add(resultObj);
                    resultLock.Release();
                });

            return Task.FromResult(this.Json(resultObjs));
        }



Public class ApiClass
{
       Public async Task<string> GetResultFromAnotherService(string id)
       {
               ….
               …
               await Call AnAsyncOperationToGetResult   
              …
              …
       }
}
4

1 に答える 1