ในกรณีของฉันคำตอบที่ยอมรับไม่ทำงาน ฉันกำลังเรียก API จากแอปพลิเคชัน MVC ซึ่งไม่มีการกระทำแบบอะซิงโครนัส
นี่คือวิธีที่ฉันจัดการเพื่อให้ทำงาน:
private static readonly TaskFactory _myTaskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default);
public static T RunSync<T>(Func<Task<T>> func)
{
CultureInfo cultureUi = CultureInfo.CurrentUICulture;
CultureInfo culture = CultureInfo.CurrentCulture;
return _myTaskFactory.StartNew<Task<T>>(delegate
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = cultureUi;
return func();
}).Unwrap<T>().GetAwaiter().GetResult();
}
จากนั้นฉันก็เรียกมันว่า:
Helper.RunSync(new Func<Task<ReturnTypeGoesHere>>(async () => await AsyncCallGoesHere(myparameter)));