我有一个有趣的问题。我有一个登录方法,它适用于 WCF 服务。
我创建了一个任务完成并等待结果到来。
问题是,如果我调用 2 次登录方法,第二次不会返回任何内容。我放了断点,它进入完成的事件,它调用 trysetresult 但没有返回。
这是我的代码
public Task<User> LoginByUserName(string userName, string password)
{
var tcs = new TaskCompletionSource<User>();
if (!_registeredEventList.Contains ("LoginByUserNameCompleted")) {
_registeredEventList.Add ("LoginByUserNameCompleted");
userService.LoginByUserNameCompleted += (object sender, LoginByUserNameCompletedEventArgs args) => {
if (args.Error != null)
tcs.TrySetException (args.Error);
if (args.Result != null)
tcs.TrySetResult (args.Result);
else
tcs.TrySetResult (null);
};
}
userService.LoginByUserNameAsync (userName,password);
return tcs.Task;
}
我这样叫;
var loginResult= await Task.Run(()=>serviceHelper.LoginByUserName(userName,password));
例如,如果用户第一次输入了错误的登录信息,在第二次尝试中,什么都不会返回。
PS: _registeredEventList 持有是否已经订阅了事件。如果是,则它不会再次创建。当我删除该部分时,它可以工作。