public async Task <IEnumerable <RoomDetails> > GetAllRoomsAsync() { var rooms = await RoomResource.ReadAsync(); var tasks = rooms.Select( room => GetRoomDetailsAsync( room, ParticipantResource.ReadAsync( room.Sid, ParticipantStatus.Connected))); return(await Task.WhenAll(tasks)); async Task <RoomDetails> GetRoomDetailsAsync( RoomResource room, Task <ResourceSet <ParticipantResource> > participantTask) { var participants = await participantTask; return(new RoomDetails { Name = room.UniqueName, MaxParticipants = room.MaxParticipants ?? 0, ParticipantCount = participants.ToList().Count }); } }
public async ValueTask <IEnumerable <RoomDetails> > GetAllRoomsAsync() { var rooms = await RoomResource.ReadAsync(); var tasks = rooms.Select( room => GetRoomDetailsAsync( room, ParticipantResource.ReadAsync( room.Sid, ParticipantStatus.Connected))); return(await Task.WhenAll(tasks));
public async Task <IEnumerable <RoomDetails> > GetAllRoomsAsync(string roomSid = null) { var rooms = await RoomResource.ReadAsync(); if (roomSid != null) { var tasks = rooms.Where(x => x.Sid == roomSid).Select( room => GetRoomDetailsAsync( room, ParticipantResource.ReadAsync( room.Sid, ParticipantStatus.Connected))); return(await Task.WhenAll(tasks)); } else { var tasks = rooms.Select( room => GetRoomDetailsAsync( room, ParticipantResource.ReadAsync( room.Sid, ParticipantStatus.Connected))); return(await Task.WhenAll(tasks)); } //Note that for every room n that exists, GetRoomDetailsAsync is invoked to fetch the room’s connected participants. This can be a performance concern! Even though this is done asynchronously and in parallel, it should be considered a potential bottleneck and marked for refactoring. It isn't a concern in this demo project, as there are, at most, a few rooms. async Task <RoomDetails> GetRoomDetailsAsync( RoomResource room, Task <ResourceSet <ParticipantResource> > participantTask) { var participants = await participantTask; return(new RoomDetails { Id = room.Sid, Name = room.UniqueName, MaxParticipants = room.MaxParticipants ?? 0, ParticipantCount = participants.ToList().Count }); } }