我正在尝试获取给定用户的lync状态。我的代码将使用64位环境中的UCMA 4.0与lync server 2010交谈。
这是我的代码,等待异步调用以获取lync状态。
switch
我不确定如何等到private async void getNotifications(UserEndpoint endpoint, string useridSIP)
{
_userEndpoint.PresenceServices.BeginPresenceQuery(
new[] { useridSIP },
new[] { "state" },
null,
(ar) => {
Task<List<RemotePresentityNotification>> notificationFetch = _userEndpoint.PresenceServices.EndPresenceQuery(ar).ToList<RemotePresentityNotification>();
List<RemotePresentityNotification> result = await notificationFetch;
result.ForEach(x => {
LyncUser user = new LyncUser();
if (x.AggregatedPresenceState != null)
{
user.Presence = x.AggregatedPresenceState.Availability.ToString();
}
else
{
user.Presence = "Unknown";
}
user.UserName = x.PresentityUri.ToString();
usersWithStatus.Add(user);
});
},
null);
}
结果返回
List<RemotePresentityNotification>
整个源代码。
Task<List<RemotePresentityNotification>> notificationFetch = _userEndpoint.PresenceServices.EndPresenceQuery(ar).ToList<RemotePresentityNotification>();
List<RemotePresentityNotification> result = await notificationFetch;
答案 0 :(得分:1)
我相信您正在寻找Task.Factory.FromAsync
方法。此方法是Begin
和End
async
模式 - detailed here的包装。例如,你想要这样做:
private async Task<List<RemotePresentityNotification>> GetNotifications(UserEndpoint endpoint, string useridSIP)
{
var task = Task.Factory.FromAsync(
_userEndpoint.PresenceServices.BeginPresenceQuery,
_userEndpoint.PresenceServices.EndPresenceQuery,
new[] { useridSIP },
new[] { "state" });
var results = await task;
return results.ToList();
}
async void
详细here async
await
醇>
有了这个,你可以await
然后按照你认为合适的方式处理它,就像这样:
private async Task SomeCaller(UserEndpoint endpoint, string useridSIP)
{
var list = await GetNotifications(endpoint, useridSIP);
// ... do stuff with it
}
更新1
通过查看详细here PresenceServices
,确保确保State
实际上可用。
只要端点的State属性设置为Established,就可以使用所有状态服务。
此外,this可能有助于您查看。