Привет всем!
Вот небольшой примерчик.
Первый, многословный вариант компилируется.
А второй нет, компилятор считает что, target.OnLog( logEntry ) возвращает dynamic.
Как так?
public interface ILogNotifications
{
Task OnLog( dynamic logEntry );
}
public class LogNotificationsMultiplexer : ILogNotifications
{
public Task OnLog( dynamic logEntry )
{
// так работает
var result1 = Task.WhenAll( targets_.Select( (Func<ILogNotifications, Task>)( target => target.OnLog( logEntry ) ) ) );
// а так нет
var result2 = Task.WhenAll( targets_.Select( target => target.OnLog( logEntry ) ) );
return result1;
}
private readonly ConcurrentBag<ILogNotifications> targets_ = new ConcurrentBag<ILogNotifications>();
}
Здравствуйте, SergASh, Вы писали:
result2 = Task.WhenAll(targets_.Select(target => target.OnLog((object)logEntry)));
или
static class EnumerableExtension
{
public static IEnumerable<Task> Select2<TSource>(this IEnumerable<TSource> source, Func<TSource, Task> selector)
{
foreach (TSource item in source)
yield return selector(item);
}
}