私は次のようなコントローラーアクションを呼び出すためにajaxリクエストを行います:
コントローラ:
[AsyncTimeout(8000, Order = 3)]
[HandleError(ExceptionType = typeof(TimeoutException), Order = 4, View = "TimeoutError")]
public async Task<JsonResult> RemovePackageAsync(CancellationToken cancellationToken, string packageId, ICollection<int> ids)
{
PackageRemoveItem removeItem = new PackageRemoveItem()
.............blah blah blah
await this.deviceRepository.RemovePackageAsync(removeItem);
return this.Json(JsonConvert.SerializeObject(removeItem.Machines));
}
方法:
public async Task RemovePackageAsync(PackageRemoveItem removeItem, CancellationToken cancelToken = default(CancellationToken))
{
await Task.Run(() =>
{
int[] machines = removeItem.Machines.Keys.ToArray();
.......
});
}
ただし、これをデバッグで実行すると、ajax応答は「RemovePackageAsync」が終了するまで待機します。ここで達成しようとしているのは、このメソッドを別のスレッドで呼び出し、実行させて、終了するのを待たずに、コントローラーからすぐに「真の」応答を取得することです。
ajax call => controller =>新しいスレッドでメソッドを呼び出します。終了するのを待たないでください。ただし、trueを返します=>必要な限りメソッドを実行します。そして私は他のことをするようになります