【问题标题】:How to correctly get function return value from a task?如何从任务中正确获取函数返回值?
【发布时间】:2015-11-03 14:58:41
【问题描述】:

我正在尝试(没有成功)异步调用一个函数并等待它的返回值

bool result = Task.Factory.StartNew(() => { return StupidFunction(someParameter); }).Result;

if (result)
    MessageBox.Show("Yes");
else
    MessageBox.Show("No");

愚蠢的函数是public static bool函数

应用程序永远挂起。

【问题讨论】:

  • 那么StupidFunction() 是做什么的?
  • 您在寻找bool result = await Task.Factory...吗?
  • 好吧,除非StupidFunction() 没有返回,或者StupidFunction() 对用户界面做了什么,否则您发布的代码将起作用。
  • 顺便说一句,您不会异步调用此函数。仅仅启动一个任务并不会使其异步,通过在最后使用.Result,它让它在那里等待直到它得到结果。为什么不使用 async/await 模式并标记 StupidFunction async 并等待它?

标签: c# wpf task


【解决方案1】:

解决

Task.Run(() =>
{
    if (StupidFunction(someParameter))
        Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => MessageBox.Show(Application.Current.MainWindow, "yes")));
    else
        Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => MessageBox.Show(Application.Current.MainWindow, "no")));
});

【讨论】:

  • 这仅适用于 WPF 应用程序,OP 并不清楚这是 WPF 还是 Winforms,但很高兴您解决了问题。
猜你喜欢
  • 2011-10-29
  • 2017-12-16
  • 2017-07-19
  • 2021-04-04
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多