簡體   English   中英

任務結果進入單個列表

[英]Task Results into a Single list

我的WCF服務中有以下方法:

public List<string> ProcessTask(IEnumerable<string> data)
{             
    var contentTasks = ..........
    List<string> contentWeb = new List<string>();

    Task.Factory.ContinueWhenAll(contentTasks, tasks =>
    {
        foreach (var task in tasks)
        {
            if (task.IsFaulted)
            {
                Trace.TraceError(task.Exception.GetBaseException().Message);
                continue;
            }

            if (task.Result == null || String.IsNullOrEmpty(task.Result.Content))
            {
               continue;
            }

            contentWeb.Add(task.Result.Content);
        }
    });
}

如何從所有任務返回具有Result.Content的字符串列表? 這些任務是異步任務,所以基本上我必須等到所有任務完成后再返回結果。

你應該返回一個Task<List<string>>

public Task<List<string>> ProcessTasksAsync(IEnumerable<string> data)
{
    var contentTasks = ..........
    return Task.Factory.ContinueWhenAll(contentTasks, tasks =>
    {
        var contentWeb = new List<string>(); // Build this in the continuation
        foreach (var task in tasks)
        {
            // ...same code...

            contentWeb.Add(task.Result.Content);

        }
        return contentWeb; // Set the task's result here
    });
}

由於這是一個WCF服務,則可以使用Task<T>方法來實現異步方法對通過返回Task<T>Begin***方法,以及展開的Task<T>End***方法。

這使得該方法以適當的方式異步。

請注意,使用async / await在C#5中要容易得多:

public async Task<List<string>> ProcessTasksAsync(IEnumerable<string> data)
{
    var contentTasks = ..........

    await Task.WhenAll(contentTasks);

    var contentWeb = new List<string>(); // Build this in the continuation
    foreach (var task in contentTasks)
    { 
        // ...same code...

        contentWeb.Add(task.Result.Content);
    }

    return contentWeb;
}

而不是continuewhenall我不得不使用Task.WaitAll(contentTasks);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM