Tag: 异步

System.Data.IDbCommand和异步执行?

System.Data.SqlClient.SqlCommand有方法 BeginExecuteNonQuery BeginExecuteReader BeginExecuteXmlReader 和 EndExecuteNonQuery EndExecuteReader EndExecuteXmlReader 用于异步执行。 System.Data.IDbCommand只有 ExecuteNonQuery ExecuteReader ExecuteXmlReader 这些仅用于同步操作。 是否存在异步操作的接口? 另外,为什么没有BeginExecuteScalar?

异步/等待代码中的竞争条件

我只是想知道下面的代码中是否出现竞争条件: int readingFiles; async Task ReadFile (string file) { ++readingFiles; var text = await Stream.ReadFileAsync(file); –readingFiles; return text; } 如果线程池线程执行ReadFile方法,则readFiles将由两个不同的线程访问,而readingFiles变量不受任何同步惯用法的保护。 这意味着对于执行“–readingFiles”的其他线程,readFiles的第一次更新不应该是可见的。 但是,我从未在“–readingFiles”之后看到readingFiles等于-1。 我检查同一个线程是否使用Thread.CurrentThread执行++和 – 操作。 在大多数情况下,它不是同一个线程,我仍然没有看到readingFiles为-1。 即使存在竞争条件且readingFiles不易变,为什么我不能看到这种竞争条件的影响?

如何在Intellitrace事件中跟踪异步数据库操作?

我试图看到我的应用程序使用EntityFramework做的一些查询。 在我的方法中,我没有异步,我可以正常查看查询: public List GetTools() { return EntityContext.ToList(); } 但如果它喜欢: public Task<List> GetTools(int quantity) { return EntityContext.Take(quantity).ToListAsync(); } 是否可以在IntelliTrace事件中获取异步方法的查询? 谢谢。

将同步方法包装成可以“等待”的异步方法

我有一个同步通话: _context.User.Where((u) => (u.UserID == twitterId && u.Type == UserType.Show)).SingleOrDefault(); 我需要将其包装成异步的,我可以等待使用await关键字。 我怎样才能做到这一点? 谢谢。

在void方法中使用async await

我有签名的方法我无法改变。 它应该是 protected override void OnInitialize() 使用Windows 8 Metro API我需要检查文件是否存在并在此NoSignatureChange方法中读取它。 使用PlainOldCSharp,我会写类似的东西 protected override void OnInitialize() { … try { var file = folder.OpenFile(fileName); fileExists=true; } catch(FileNotFoundException) { fileExists=false } } 请记住,在Windows 8 API中只检查文件是否存在正在处理FileNotFoundException此外,在Windows 8 API中所有FileIO API都是异步的,所以我只有file.OpenFileAsync方法。 所以,问题是: 如何使用Windows 8 API中的folder.OpenFileAsync方法编写此代码而不更改包含方法的签名

异步写入套接字线程是否安全?

考虑Socket.BeginSend()方法。 如果两个线程池线程同时调用此方法,它们各自的消息是否最终会相互混合,或者套接字类是否阻止这种情况发生?

validation异步方法中的参数

我正在编写一个具有同一方法的同步和异步版本的类void MyMethod(object argument)和Task MyMethodAsync(object argument) 。 在同步版本中,我通过简单检查validation参数 if (argument == null) throw new ArgumentNullException(“argument”); 在异步方法中,相同的检查应该如何? 1)与同步方法相同 2)(第一次回答后更新) if (argument == null) return new Task.Factory.StartNew(() => { throw new ArgumentNullException(“argument”); });

具有返回值的Hangfire背景作业

我正在从Task.Run切换到Hangfire 。 在.NET 4.5+中, Task.Run可以返回Task ,它允许我运行返回void以外的任务。 我通常可以通过访问MyReturnedTask.Result属性来等待并获得我的任务结果 我的旧代码示例: public void MyMainCode() { List listStr = new List(); listStr.Add(“Bob”); listStr.Add(“Kate”); listStr.Add(“Yaz”); List<Task> listTasks = new List<Task>(); foreach(string str in listStr) { Task returnedTask = Task.Run(() => GetMyString(str)); listTasks.Add(returnedTask); } foreach(Task task in listTasks) { // using task.Result will cause the code to wait for the task […]

应该返回Task的方法抛出exception吗?

返回Task的方法有两个报告错误的选项: 立刻抛出exception 返回将以exception结束的任务 调用者是否应该期望两种类型的错误报告,或者是否有某些标准/协议将任务行为限制为第二个选项? 例: class PageChecker { Task CheckWebPage(string url) { if(url == null) // Argument check throw Exception(“Bad URL”); if(!HostPinger.IsHostOnline(url)) // Some other synchronous check throw Exception(“Host is down”); return Task.Factory.StartNew(()=> { // Asynchronous check if(PageDownloader.GetPageContent(url).Contains(“error”)) throw Exception(“Error on the page”); }); } } 处理这两种类型看起来很难看: try { var task = pageChecker.CheckWebPage(url); task.ContinueWith(t => […]

从资源文件/内容获取流

这是从资源文件获取Stream的正确/唯一方法吗? Uri uri = new Uri(fullPath); StorageFile storageFile = await Windows.Storage.StorageFile. GetFileFromApplicationUriAsync(uri); IRandomAccessStreamWithContentType randomAccessStream = await storageFile.OpenReadAsync(); IInputStream resourceStream = (IInputStream) randomAccessStream.GetInputStreamAt(0); 我的所有其他源(http和本地存储)都返回一个Stream对象,并且使用if-else代码使用其中一个或其他代码是很痛苦的。 我也尝试过创建一个MemoryStream,但我甚至找不到一个方法来获取字节…请帮助。 uint size = (uint)randomAccessStream.Size; IBuffer buffer = new Windows.Storage.Streams.Buffer(size); await randomAccessStream.ReadAsync(buffer, size, InputStreamOptions.None); Stream stream = new MemoryStream(buffer); // error takes byte[] not IBuffer 从资源中读取时的IInputStream.ReadAsync(): http : //msdn.microsoft.com/en-us/library/windows/apps/windows.storage.streams.iinputstream.readasync.aspx 而Stream.Read()和Stream.ReadAsync()看起来像这样: http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx 和 […]