调用异步方法时失败

本文关键字:失败 异步方法 调用 | 更新日期: 2023-09-27 18:08:03

我有这个方法

public class WebSearcher : IWebSearcher
{
    private static readonly string _rootUri;
    private static readonly BingSearchContainer _bingContainer;
    private static readonly string _accountKey;
    static WebSearcher()
    {
        _rootUri = ConfigurationSettings.Settings.RootUri;
        _bingContainer = new BingSearchContainer(new Uri(_rootUri));
        _accountKey = ConfigurationSettings.Settings.AccountKey;
        _bingContainer.Credentials = new NetworkCredential(_accountKey, _accountKey);
    }
    public Task<IEnumerable<WebResult>> SearchAsynch(string query)
    {
        if (query == null)
        {
            throw new ArgumentNullException("query cannot be null");
        }
        DataServiceQuery<WebResult> webQuery =
            _bingContainer.Web(query, null, null, null, null, null, null, null);
        return Task.Factory.FromAsync(webQuery.BeginExecute(null, null),
            asyncResult => webQuery.EndExecute(asyncResult));
    }
}

我这样称呼它

public class Client
{
    public static void Main()
    {
        Search();
    }
    private static async Task Search()
    {
        var tasks = new Task<IEnumerable<WebResult>>[100];
        IWebSearcher webSearcher = new WebSearcher();
        for (var i = 0; i < 100; i++)
        {
            tasks[i] = webSearcher.SearchAsynch(i.ToString());
        }
        await Task.WhenAll(tasks);
        for (var i = 0; i < 100; i++)
        {
            Console.WriteLine(tasks[i].Result.First().Title);
        }
    }
}

代码在WhenAll行停止执行

调用异步方法时失败

您需要将Search从async void更改为async Task,然后在Main中等待()结果-否则,它在任务启动后退出,但没有等待它完成