как создать синхронный Task ?
От: Jack128  
Дата: 28.09.11 13:12
Оценка:
Хочу написать что то типа такого:


async Task<MyResult> MyAsyncFunc()
{
    var x = SyncFunc();
    var y = await AsynсFunc(x);
    return OtherSyncFunc(y);
}



на C# 4 без всяких CTP.

Имеется Select/SelectMany для тасков

можно написать так:
Task.Factory.StartNew(SyncFunc).SelectMany(AsyncFunc).Select(OtherSyncFunc)


но функция SyncFunc — очень короткая и дегать из-за ней пул потоков не хочется, хочется аналог TaskContinuationOptions.ExecuteSynchronously в перечислении TaskCreationOptions.

Как быть?
Re: как создать синхронный Task ?
От: Jack128  
Дата: 28.09.11 13:19
Оценка: 4 (1) +1
Блин, всё, пора домой, совсем к вечеру голова того. Размякла.

вот, может кому пригодтся:


        public static Task<TResult> CreateSyncTask<TResult>(Func<TResult> action)
        {
            var tcs = new TaskCompletionSource<TResult>();
            try
            {
                tcs.SetResult(action());
            }
            catch (Exception ex)
            {
                tcs.SetException(ex);
            }
            return tcs.Task;
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.