met*_*art 8 .net c# oracle task-parallel-library async-await
我想编写一系列以异步/等待方式查询Oracle数据库的方法.由于ODP.NET似乎既不支持等待的*Async方法也不支持Begin/EndOperationName对,我有哪些选项可以手动实现?
到目前为止,我所看到的I/O密集型异步方法的所有示例都只调用.NET库中的其他异步方法,但内部完成上下文切换的方式没有任何亮点.文档说在这些情况下没有使用单独的线程,并且多线程开销显然仅适用于CPU密集型操作.所以我猜使用Task.Run()不是一个选项,或者我错了?
Toa*_*yen -1
您始终可以将Task.Factory.StartNew 与TaskCreationOptions.LongRunning一起使用,以便 .NET 将创建一个新线程而不是使用线程池线程。以下是可应用于您的操作的手动异步代码。
private static void ManualAsyncOperation()
{
Task<string> task = Task.Factory.StartNew(() =>
{
Console.WriteLine("Accessing database .....");
//Mimic the DB operation
Thread.Sleep(1000);
return "Hello wolrd";
},TaskCreationOptions.LongRunning);
var awaiter =task.GetAwaiter();
awaiter.OnCompleted(() =>
{
try
{
var result = awaiter.GetResult();
Console.WriteLine("Result: {0}", result);
}
catch (Exception exception)
{
Console.WriteLine("Exception: {0}",exception);
}
});
Console.WriteLine("Continuing on the main thread and waiting for the result ....");
Console.WriteLine();
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2678 次 |
| 最近记录: |