【发布时间】:2015-01-16 14:21:30
【问题描述】:
这两个函数有效,但我的问题是匿名函数(接收ServiceCheck 作为参数的函数)从未被调用。
我需要做什么才能使CheckServiceConnection 函数返回字符串以便匿名函数运行?
internal async void CheckServiceConnection()
{
await _da.CheckServiceConnection((ServiceCheck) =>
{
GeneralEventArgs args = new GeneralEventArgs();
args.GeneralObject = (object)ServiceCheck;
ServiceConnection(this, args);
});
}
public Task<string> CheckServiceConnection(Action<string> OnComplited)
{
var tcs = new TaskCompletionSource<string>();
ws.CheckServiceCompleted += (s, e) =>
{
if (e.Error != null)
tcs.TrySetException(e.Error);
else if (e.Cancelled)
tcs.TrySetCanceled();
else if (e.Result != null)
tcs.TrySetResult(e.Result);
};
try
{
ws.CheckServiceAsync();
}
catch (Exception ex)
{
ws.LogAsync(ex.Message, "DataManager.CheckServiceConnection()");
}
return tcs.Task;
}
当我像这样编写 CheckServiceConnection 函数时 - 它正在工作
(当然CheckServiceConnection 不接受任何参数):
internal async void CheckServiceConnection()
{
var ServiceCheck = await _da.CheckServiceConnection();
GeneralEventArgs args = new GeneralEventArgs();
args.GeneralObject = (object)ServiceCheck;
ServiceConnection(this, args);
}
【问题讨论】:
-
你确定你的第一个括号是正确的吗,它说
await _da.CheckServiceConnection((ServiceCheck)? -
是的,ServiceCheck是CheckServiceConnection完成后返回给匿名函数的字符串。
标签: c# asynchronous anonymous async-await