这两个函数有效但我的问题是永远不会调用匿名函数(接收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);
}
答案 0 :(得分:2)
您的CheckServiceConnection
方法永远不会调用传递给它的OnComplited
操作参数。这就是为什么第一个函数中的匿名函数永远不会被调用的原因。
如果要将匿名函数传递给CheckServiceConnection
并调用它,则需要调用它。也就是说,你添加一行如下:
OnComplited( "some string" );
答案 1 :(得分:0)
你永远不会打电话。它不会被自动调用。
然而,无论如何,我认为没有太多理由这样做。你在等待这个方法,为什么不这样做呢?
internal async void CheckServiceConnection()
{
var result = await _da.CheckServiceConnection();
GeneralEventArgs args = new GeneralEventArgs();
args.GeneralObject = result;
ServiceConnection(this, args);
}
此外,您确定CheckServiceConnection
方法不应该返回Task
吗?这不是一个好主意。
总而言之,您似乎在混合使用了很多不同的通知方法,异步代码等等。也许您想稍微修改一下设计?