OperationCanceledException
和之间有什么区别TaskCanceledException
?如果我使用.NET 4.5并使用async
/ await
keywords,我应该抓住哪一个?
我想在ViewModel的构造函数中加载一些数据,但由于WinRT的异步性质,我被迫使用异步方法.不幸的是我不能有异步构造函数所以我试图将异步方法用作同步方法.我确信在应用程序加载时有一种更好的加载数据(异步)的方法,但我的想法暂时还是空白.
我正在寻找一种方法来修复我的应用程序使用我想要的思路,或者使用更合适的方法永久修复它.
代码非常简单(甚至缺少ViewModel)只是为了演示我面临的问题.
public sealed partial class MainPage : Page
{
public string Data { get; set; }
public DataService _dataService { get; set; }
public MainPage()
{
this.InitializeComponent();
_dataService = new DataService();
var t = _dataService.GetData();
Data = t.Result;
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached. The Parameter
/// property is typically used to configure the page.</param> …
Run Code Online (Sandbox Code Playgroud) 我列出了需要按顺序处理的工作项。有时列表将为空,有时将包含一千个项目。一次只能按顺序处理一个。目前,我正在执行以下操作,这些操作对我来说看起来很愚蠢,因为我正在使用Consumer任务中的Thread.Sleep来等待100ms,然后再检查列表是否为空。这是执行此操作的标准方法,还是我完全错了。
public class WorkItem
{
}
public class WorkerClass
{
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken ct = new CancellationToken();
List<WorkItem> listOfWorkItems = new List<WorkItem>();
public void start()
{
Task producerTask = new Task(() => producerMethod(ct), ct);
Task consumerTask = new Task(() => consumerMethod(ct), ct);
producerTask.Start();
consumerTask.Start();
}
public void producerMethod(CancellationToken _ct)
{
while (!_ct.IsCancellationRequested)
{
//Sleep random amount of time
Random r = new Random();
Thread.Sleep(r.Next(100, 1000));
WorkItem w = new WorkItem();
listOfWorkItems.Add(w);
}
}
public void consumerMethod(CancellationToken _ct) …
Run Code Online (Sandbox Code Playgroud) 它应该很简单,但我在将简单的xml文件读入字符串列表时遇到了麻烦.示例xml文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<directorylist>
<dir>c:\TEST1\</dir>
<dir>c:\TEST2\</dir>
</directorylist>
Run Code Online (Sandbox Code Playgroud)
我想读一个LIst.你能推荐最好的读/写方式吗?
日Thnx
我使用resharper和visual studio测试运行器在Visual Studio 2012中使用最新版本的NUnit(2.6.2).我有以下示例测试,我试图验证在预期的异步方法调用上引发异常.
不幸的是,这似乎没有按预期工作.第一个测试AsyncTaskCanceledSemiWorking
只有因为我有expectedexception属性.实际的断言完全被忽略(正如您可以通过ArgumentOutOfRange异常看到的那样,这只是一个让它失败的假装).
该AsyncTaskCanceledWorking
精品工程,但犯规测试抛出异常的某一行,因此不太有用.
第三个与下面的庄严失败....
System.Threading.Tasks.TaskCanceledException : A task was canceled.
Exception doesn't have a stacktrace
Run Code Online (Sandbox Code Playgroud)
关于如何从特定行测试TaskCanceledException的任何想法都非常有用.
谢谢
[Test]
[ExpectedException(typeof(TaskCanceledException))]
public async Task AsyncTaskCanceledSemiWorking()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
cancellationTokenSource.Cancel();
Assert.That(await LongRunningFunction(token), Throws.InstanceOf<ArgumentOutOfRangeException>());
}
[Test]
[ExpectedException(typeof(TaskCanceledException))]
public async Task AsyncTaskCanceledWorking()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
cancellationTokenSource.Cancel();
int i = await LongRunningFunction(token);
}
[Test]
public async Task AsyncTaskCanceledFailed()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken …
Run Code Online (Sandbox Code Playgroud) c# ×5
async-await ×2
task ×2
asynchronous ×1
exception ×1
linq ×1
nunit ×1
queue ×1
unit-testing ×1
xml ×1