50

待ちたいタスクのリストがあります。みたいに待ってる

    await TaskEx.WhenAll(MyViewModel.GetListOfTasks().ToArray());

MyViewModel.GetListOfTasks() はタスクのリストを返します:

    var tasksList = new List<Task>();
    foreach (var item in Items)
    {                
        tasksList.Add(item.MyTask());
    }

ここで、すぐに実行されるダミー タスクを返したいと思います。ただし、 TaskEx.WhenAll は永久に待機します。

    public Task<bool> MyTask()
    {
        return new Task<bool>(() => false);
    }

すぐに終了するタスクを返すにはどうすればよいですか?

4

2 に答える 2

101

.NET 4.5 では、FromResult を使用して、タスクの結果をすぐに返すことができます。

public Task<bool> MyTask()
{
    return TaskEx.FromResult(false);
}

http://msdn.microsoft.com/en-us/library/hh228607%28v=vs.110%29.aspx


Windows Phone 8.1 以降では、他のプラットフォームとの一貫性を保つためにAPI が統合されました。

public Task<bool> MyTask()
{
    return Task.FromResult(false);
}
于 2013-11-07T21:05:12.237 に答える
9

.NET 4.5 より前では、 を使用してメソッドTaskCompletionSource<TResult>をシミュレートできます。FromResult

public static Task<TResult> FromResult<TResult>(TResult result)
{
    var completionSource = new TaskCompletionSource<TResult>();
    completionSource.SetResult(result);
    return completionSource.Task;
}
于 2013-11-07T21:07:40.860 に答える