当有一个或两个任务时它可以正常工作但是当我们列出了多个任务时会抛出错误"任务被取消".

List<Task> allTasks = new List<Task>();
allTasks.Add(....);
allTasks.Add(....);
Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken);
private static Task<T> HttpClientSendAsync<T>(string url, object data, HttpMethod method, string contentType, CancellationToken token)
{
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, url);
HttpClient httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(Constants.TimeOut);
if (data != null)
{
byte[] byteArray = Encoding.ASCII.GetBytes(Helper.ToJSON(data));
MemoryStream memoryStream = new MemoryStream(byteArray);
httpRequestMessage.Content = new StringContent(new StreamReader(memoryStream).ReadToEnd(), Encoding.UTF8, contentType);
}
return httpClient.SendAsync(httpRequestMessage).ContinueWith(task =>
{
var response = task.Result;
return response.Content.ReadAsStringAsync().ContinueWith(stringTask =>
{
var json = stringTask.Result;
return Helper.FromJSON<T>(json);
}); …Run Code Online (Sandbox Code Playgroud) 我有这个简单的代码:
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功能应该标记为 …
在某些时候,CoreCLR支持异步主入口点.见http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
但是,以下程序在.NET Core RTM中都不起作用
using System;
using System.Threading.Tasks;
namespace ConsoleApplication
{
public class Program
{
public static async Task Main(string[] args)
{
await Task.Delay(1000);
Console.WriteLine("Hello World!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
using System;
using System.Threading.Tasks;
namespace ConsoleApplication
{
public class Program
{
public async Task Main(string[] args)
{
await Task.Delay(1000);
Console.WriteLine("Hello World!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这两个都失败了,错误:
错误CS5001:程序不包含适用于入口点的静态"主"方法
.NET Core RTM是否支持异步控制台应用程序?
我的项目构建都失败了,但我没有显示任何错误.我试过清洁和重建,但没有用.
我将MSBuild输出详细程度改为'Diagnostic',希望它能帮我识别问题,现在我卡住了.这是输出的样子:
1>Project 'ProjectMM.Data.Models' is not up to date. Input file 'C:\Projects\ProjectMM\ProjectMM.Data.Models\ProjectMM.Data.Models.csproj' is modified after output file 'C:\Projects\ProjectMM\ProjectMM.Data.Models\bin\Debug\ProjectMM.Data.Models.pdb'.
All packages are already installed and there is nothing to restore.
1>------ Build started: Project: ProjectMM.Data.Models, Configuration: Debug Any CPU ------
2>Project 'ProjectMM.Data' is not up to date. Input file 'C:\Projects\ProjectMM\ProjectMM.Data\ProjectMM.Data.csproj' is modified after output file 'C:\Projects\ProjectMM\ProjectMM.Data\bin\Debug\ProjectMM.Data.pdb'.
2>------ Build started: Project: ProjectMM.Data, Configuration: Debug Any CPU ------
3>Project 'ProjectMM' is not up to date. Input file 'c:\projects\projectmm\projectmm\app_start\bundleconfig.cs' is modified after output file …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个简单的程序来测试Visual Studio 2012中新的.NET异步功能.我通常使用BackgroundWorkers来异步运行耗时的代码,但有时候看起来像是一个相对简单(但很昂贵)操作的麻烦.新的异步修改器看起来很好用,但不幸的是我似乎无法进行简单的测试.
这是我在C#控制台应用程序中的代码:
static void Main(string[] args)
{
string MarsResponse = await QueryRover();
Console.WriteLine("Waiting for response from Mars...");
Console.WriteLine(MarsResponse);
Console.Read();
}
public static async Task<string> QueryRover()
{
await Task.Delay(5000);
return "Doin' good!";
}
Run Code Online (Sandbox Code Playgroud)
我在MSDN上查看了一些示例,它看起来像我的代码应该正常工作,但我在包含"await QueryRover();"的行上遇到了构建错误.我疯了还是发生了什么?
Visual Studio 2017发布后,我想尝试使用新的C#7功能创建简单的控制台项目.我希望我只需下载新的Visual Studio 2017,然后创建新的控制台项目,并可以使用新的C#7功能.但我不能.
如果我安装NuGet包System.ValueTuple,我可以使用一些功能,如元组.
但对于其他功能,我不知道我需要做什么.例如这个NuGet问题.
我现在需要做所有这些脏安装吗?或者我可以用更简单的方式启用c#7功能?
我从这个 链接复制下面的代码.但是当我编译这段代码时,我得到的入口点不能用'async'修饰符标记.如何使这段代码可编辑?
class Program
{
static async void Main(string[] args)
{
Task<string> getWebPageTask = GetWebPageAsync("http://msdn.microsoft.com");
Debug.WriteLine("In startButton_Click before await");
string webText = await getWebPageTask;
Debug.WriteLine("Characters received: " + webText.Length.ToString());
}
private static async Task<string> GetWebPageAsync(string url)
{
// Start an async task.
Task<string> getStringTask = (new HttpClient()).GetStringAsync(url);
// Await the task. This is what happens:
// 1. Execution immediately returns to the calling method, returning a
// different task from the task created in the previous statement. …Run Code Online (Sandbox Code Playgroud) 我正在使用一个提供方法结束...Async和返回的库Task.我将在命令行应用程序中使用它们.所以我需要同步调用它们.
C#当然不允许在Main方法中调用这些方法,因为你不能async在Main方法上使用修饰符.假设这是任务:
var task = datastore.Save(data);
Run Code Online (Sandbox Code Playgroud)
我发现了几个解决方案:
Tasks.WaitAll(task);
task.Wait();
Run Code Online (Sandbox Code Playgroud)
然而,所有这些包装抛出异常AggregateException,我不希望如此.我只想说task.Result,我希望抛出原始异常.
当我使用返回的方法时Task<TResult>,即使没有设置连续任务也会task.Result抛出AggregateException.为什么这是hapening?
我也尝试过,
task.RunSynchronously();
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
可能不会在未绑定到委托的任务上调用RunSynchronously,例如从异步方法返回的任务.
所以我猜这不是标记为的方法async.
在没有异步上下文的控制台应用程序中使用为异步应用程序设计的库的模式的任何想法?
我们知道,C#7允许使Main()函数异步.
它给了什么优势?出于什么目的,您可以使用异步Main而不是普通的Main?
我读了很多async/await,但我仍然缺乏理解以下情况.
我的问题是,我应该像在DoSomething()或中那样实现我的"包装"方法DoSomethingAsync().
那么更好(以及为什么):我是否await在包装器方法中使用或直接返回Task?
public static async void Main()
{
await DoSomething();
await DoSomethingAsync();
}
private static Task DoSomething()
{
return MyLibrary.DoSomethingAsync();
}
private static async Task DoSomethingAsync()
{
await MyLibrary.DoSomethingAsync().ConfigureAwait(false);
}
public class MyLibrary
{
public static async Task DoSomethingAsync()
{
// Here is some I/O
}
}
Run Code Online (Sandbox Code Playgroud) c# ×8
async-await ×6
.net ×3
.net-4.5 ×2
build ×2
c#-5.0 ×2
c#-7.0 ×2
.net-core ×1
asynchronous ×1
msbuild ×1