【发布时间】:2021-03-23 09:52:01
【问题描述】:
我已经创建了异步函数。但这需要很长时间(执行)。功能如下。
public async Task<List<EmrData>> EmrDataTransformation(string sourceJson, EMRSchema.TemplateQT emrSchema, List<double> subjectIds)
{
List<EmrData> EmrDataList = new List<EmrData>();
try
{
StringBuilder stringBuilder = new StringBuilder();
foreach (var subjectId in subjectIds)
{
var GetIcuDischargeTransform = icuDataTransform.GetIcuDischargeTransform(sourceJson, emrSchema, subjectId);
stringBuilder.Append("var:GetIcuDischargeTransform: ").Append(" ").Append(DateTime.Now).AppendLine();
emrData.IcuDischarge = await GetIcuDischargeTransform;
stringBuilder.Append("await:GetIcuDischargeTransform: ").Append(" ").Append(DateTime.Now).AppendLine();
File.WriteAllText($"D:\\out\\awaitcheck{subjectId}.txt", stringBuilder.ToString());
}
}
// return EmrDataList;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return EmrDataList;
}
从上面的函数,调用GetIcuDischargeTransform函数。该函数如下所示。
public async Task<IcuDischarge> GetIcuDischargeTransform(string sourceJson, EMRSchema.TemplateQT emrSchema, double subjectId)
{
List<Dictionary<string, dynamic>> keyValuePairs = new List<Dictionary<string, dynamic>>();
#region Icu Discharge
var templateIcuDischarge = emrSchema.EmrData.IcuDischarge; //emrSchema.IcuDischarge;
var morStatus = Convert.ToString(CommonFunctions.GetData(sourceJson, templateIcuDischarge?.IcuDischargeIcuDischarge, templateIcuDischarge?.Mortality30DStatus, ref keyValuePairs, subjectId));
IcuDischarge icuDischarge = new IcuDischarge
{
CauseofReadmission = CommonFunctions.GetData(sourceJson, null, templateIcuDischarge?.CauseofReadmission, ref keyValuePairs, subjectId),
DateofReadmission = CommonFunctions.GetData(sourceJson, templateIcuDischarge?.CauseofReadmission, templateIcuDischarge?.DateofReadmission, ref keyValuePairs, subjectId),
DischargeDisposition = CommonFunctions.GetData(sourceJson, templateIcuDischarge?.DateofReadmission, templateIcuDischarge?.DischargeDisposition, ref keyValuePairs, subjectId),
DischargingUnit = CommonFunctions.GetData(sourceJson, templateIcuDischarge?.DischargeDisposition, templateIcuDischarge?.DischargingUnit, ref keyValuePairs, subjectId),
IcuDischargeIcuDischarge = CommonFunctions.GetData(sourceJson, templateIcuDischarge?.DischargingUnit, templateIcuDischarge?.IcuDischargeIcuDischarge, ref keyValuePairs, subjectId),
Mortality30DStatus = EnumProvider.TryParse<Mortality30DStatus>(EnumProvider.FormatStringForEnumCompare(morStatus), Mortality30DStatus.None),
ReadmissionWithin30Days = CommonFunctions.GetData(sourceJson, templateIcuDischarge?.Mortality30DStatus, templateIcuDischarge?.ReadmissionWithin30Days, ref keyValuePairs, subjectId)
};
#endregion Icu Discharge
return icuDischarge;
}
下面给出常用函数类,
public static dynamic GetData(string sourceJson, dynamic oldTemplate, dynamic newTemplate, ref List<Dictionary<string, dynamic>> keyValuePairs,
double subjectId, ArrayResult arrayResult = ArrayResult.Single)
{
if (keyValuePairs != null && oldTemplate != null && newTemplate != null && (oldTemplate.File == newTemplate?.File && oldTemplate.Sheet == newTemplate?.Sheet))
{
return GetSingleValuesFromList(keyValuePairs, newTemplate.Column, arrayResult);
}
else
{
//keyValuePairs = GetValuesFrom(sourceJson, newTemplate.File, newTemplate.Sheet, newTemplate.Column, subjectId);
keyValuePairs = GetValuesFrom(sourceJson, newTemplate?.File, newTemplate?.Sheet, newTemplate?.Column, subjectId);
return GetSingleValuesFromList(keyValuePairs, newTemplate?.Column, arrayResult);
}
}
我需要对上述功能进行任何更改吗?我可以申请线程吗?上面的代码如何实现异步功能?
【问题讨论】:
-
包裹到任务中
-
我已经在任务中完成了
-
不,你不...标记方法异步不会在后台线程上调用。你需要开始新的任务
标签: c# multithreading async-await