我试图使用回调机制从异步方法中检索返回值,如下所示:
public async void GetArea(double latitude, double longitude, Action<String> callback){
String area = "";
//code
callback(area);
}
这就是我称之为这种方法的方式:
GetArea(Position.latitude, Position.longitude, new Action<string>(delegate {
//how do I retrieve the callback return value here?
}));
如何从委托中检索返回值?
答案 0 :(得分:0)
而不是
new Action<string>(delegate { ... })
你可以说
s => { ... }
然后该值将以“s”的形式提供。但这首先是一个奇怪的模式。考虑异步任务&lt; string&gt;,而不是异步void,不要使用回调,然后使用“await GetArea(...)”直接获取结果。这假设你真的在GetArea中做了一些需要异步的东西。
答案 1 :(得分:0)
using System;
using System.Windows.Forms;
public class TestLambdaExpression
{
public static void Main()
{
Action<string> messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget = s => ShowWindowsMessage(s);
else
messageTarget = s => Console.WriteLine(s);
messageTarget("Hello, World!");
}
private static void ShowWindowsMessage(string message)
{
MessageBox.Show(message);
}
}