我正在使用async-await方法创建一个应用程序。但是使用它们对我来说存在一个大问题。在阅读了几篇文章后,我仍然不知道将我的重型同步操作包装成异步方法的最佳方式是什么。
我有两个想法。哪一个是最好的?
1)当前实现。
private Task<List<UploadedTestModel>> ParseTestFiles(List<string> filesContent)
{
var tcs = new TaskCompletionSource<List<UploadedTestModel>>();
Task.Run(() =>
{
var resultList = new List<UploadedTestModel>();
foreach (var testBody in filesContent)
{
try
{
var currentCulture = Thread.CurrentThread.CurrentCulture;
var serializerSettings = new JsonSerializerSettings
{
Culture = currentCulture
};
var parsedData = JsonConvert.DeserializeObject<UploadedTestModel>(testBody, serializerSettings);
resultList.Add(parsedData);
}
catch(Exception exception)
{
tcs.SetException(exception);
}
}
tcs.SetResult(resultList);
});
return tcs.Task;
}
我正在使用 Task.Run 和 TaskCompletionSource。
2)仅使用 Task.Run,而不使用 TaskCompletionSource。
private Task<List<UploadedTestModel>> ParseTestFiles(List<string> filesContent)
{
return Task.Run(() =>
{
. . . .
return resultList;
});
}
async
和await
的行为有些不同 - 它们保留上下文。因此,您必须使用显式的Task
初始化;然后才能await
该Task
。 - Kaveh Shahbazianasync
和await
。是我的眼睛自作主张加上了它们! - Kaveh Shahbazian