相关疑难解决方法(0)

在C#中的控制台应用程序异步?

我有这个简单的代码:

public static async Task<int> SumTwoOperationsAsync()
{
    var firstTask = GetOperationOneAsync();
    var secondTask = GetOperationTwoAsync();
    return await firstTask + await secondTask;
}


private async Task<int> GetOperationOneAsync()
{
    await Task.Delay(500); // Just to simulate an operation taking time
    return 10;
}

private async Task<int> GetOperationTwoAsync()
{
    await Task.Delay(100); // Just to simulate an operation taking time
    return 5;
}
Run Code Online (Sandbox Code Playgroud)

大.这个编译.

但是让我们说我有一个控制台应用程序,我想运行上面的代码(调用SumTwoOperationsAsync())

 static  void Main(string[] args)
        {
             SumTwoOperationsAsync();
        }
Run Code Online (Sandbox Code Playgroud)

但我读过,(使用时sync),我不得不一路同步向上向下 :

问题:这是否意味着我的Main功能应该标记为 …

c# async-await c#-5.0 .net-4.5

168
推荐指数
2
解决办法
10万
查看次数

使用线程池而不是异步IO的HttpClient.SendAsync?

所以我一直在挖掘HttpClient.SendAsyncvia Reflector 的实现.我有意想知道的是这些方法的执行流程,以及确定调用哪个API来执行异步IO工作.

在探索了里面的各种类之后HttpClient,我看到它在内部使用HttpClientHandler派生自HttpMessageHandler并实现其SendAsync方法的内容.

这是执行HttpClientHandler.SendAsync:

protected internal override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
    if (request == null)
    {
        throw new ArgumentNullException("request", SR.net_http_handler_norequest);
    }

    this.CheckDisposed();
    this.SetOperationStarted();

    TaskCompletionSource<HttpResponseMessage> source = new TaskCompletionSource<HttpResponseMessage>();

    RequestState state = new RequestState 
    {
        tcs = source,
        cancellationToken = cancellationToken,
        requestMessage = request
    };

    try
    {
        HttpWebRequest request2 = this.CreateAndPrepareWebRequest(request);
        state.webRequest = request2;
        cancellationToken.Register(onCancel, request2);

        if (ExecutionContext.IsFlowSuppressed())
        {
            IWebProxy proxy = null;

            if (this.useProxy)
            { …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task-parallel-library dotnet-httpclient

10
推荐指数
1
解决办法
2416
查看次数