在.NET 4.5中,现在有许多方法可以用于异步和非异步对,例如Flush()和FlushAsync().理想情况下,I/O交互在可能的情况下始终是异步的(.Wait()如果您确实需要,可以随时阻止),但非同步(阻塞)版本显然需要保留,因为它们具有向后兼容性.
在推出一个没有向后兼容性限制的全新库时,是否有任何理由可以包含非异步方法?
我正在将NuGet上的一个小型库移植到.NET Core.
我为主项目和测试创建了.NET Standard 1.6类库,并复制了代码.我更改了单元测试以使用XUnit属性和断言而不是NUnit.
除此之外,我几乎遵循文档中的说明,因此我添加了以下NuGet包:
唉,(1)Test Explorer没有找到我的单元测试,(2)当我运行时dotnet test,我得到以下内容:
开始测试执行,请稍候...无法找到testhost.dll for source'[...].Tests.dll'.确保测试项目具有包"microsoft.testplatform.testhost"的nuget引用.
我实际上已经添加了建议的Microsoft.TestPlatform.TestHostNuGet包,但是没有改变任何东西.
那么这里的问题是什么?
我正在使用VS2017.不是说我觉得它有所作为.
更新:更改测试项目Class Library (.NET Standard)以Class Library (.NET Core)解决问题.我仍然不明白为什么这应该有所作为.
我想用WPF编写一个简单的光线跟踪器.这是一个学习项目,因此我赞成对性能的可配置性(否则我会选择C++).
我仍然想要相对较快的像素绘制.关于StackOverflow 的上一个问题包含通过获取GDI位图在WPF中实现此目的的代码.从我对Windows编程的了解相对较少,
是否可以通过WPF Canvas(或类似)使用DirectX(而不是GDI)获得像素级访问?
如果可能的话,我还会考虑在WPF窗口(以及其他WPF控件)中合并DirectX API调用的建议.
提前致谢.
.NET中有许多类使用旧的异步编程模型(APM),"不再推荐用于新开发".APM使用Begin/End方法对,End方法将IAsyncResult对象作为参数.一个这样的类是TcpClient,您可以使用它来异步连接,如下所示:
private void SomeMethod()
{
this.tcpClient = new TcpClient();
IAsyncResult result = this.tcpClient.BeginConnect(ip, port, EndConnect, null);
}
private void EndConnect(IAsyncResult asyncResult)
{
this.tcpClient.EndConnect(asyncResult);
// ... do stuff ...
}
Run Code Online (Sandbox Code Playgroud)
基于任务的异步模式(TAP)是一种更现代的异步编程形式,通过使用async和await关键字来促进.
因此,如果您有一个类似TcpClient的类,它使用APM模型并且不公开任何任务,那么如何将其异步方法调整到TAP以便它们可以与async/ 一起使用await?
.NET 标准类库不使用.nuspec文件;项目设置中有一个“包”选项卡,您可以在其中输入 NuGet 包的所有元数据。这些都在.csproj文件中。
我想创建一个包含项目 A 和 B 的解决方案,其中项目 B 依赖于项目 A。两者都需要作为单独的包在 NuGet 上运行。但是如果有人为 B 安装了 NuGet 包,它也应该为 A 安装包。
您如何为 .NET 标准类库指定这个简单的依赖项?我不认为添加引用就足以做到这一点。
我习惯使用Topshelf创建Windows服务.使用.NET Core和跨平台的前景,这引发了许多有趣的场景:
以上主要是上下文.出于这个问题的目的,我想知道我需要采取哪些步骤来使用.NET Core在Linux上运行相当于Windows的服务.如果这可以跨平台以统一的方式完成,那就更好了.
我正在AsyncEventingBasicConsumer使用以下代码尝试RabbitMQ :
static void Main(string[] args)
{
Console.Title = "Consumer";
var factory = new ConnectionFactory() { DispatchConsumersAsync = true };
const string queueName = "myqueue";
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queueName, true, false, false, null);
// consumer
var consumer = new AsyncEventingBasicConsumer(channel);
consumer.Received += Consumer_Received;
channel.BasicConsume(queueName, true, consumer);
// publisher
var props = channel.CreateBasicProperties();
int i = 0;
while (true)
{
var messageBody = Encoding.UTF8.GetBytes($"Message {++i}");
channel.BasicPublish("", queueName, props, messageBody);
Thread.Sleep(50);
} …Run Code Online (Sandbox Code Playgroud) HttpClient在其两个构造函数中采用HttpMessageHandler参数。
在创建 HttpClient 后,是否有任何简单的方法可以更改处理程序而无需创建新的 HttpClient 实例?
在ASP .NET 5中,配置正在发生巨大变化.我们不再有web.config文件了.相反,我们可以使用JSON和其他选项,具体取决于我们在Startup课堂上设置的方式.不同的是web.config,此类配置通常不会进入wwwroot,并且客户端无法访问它.
然而,在ASP .NET 5项目模板中,有一个包含以下内容的web.config文件wwwroot:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在我看来,这可能是托管服务器在运行时寻找的东西,独立于应用程序配置.
任何人都可以阐明为什么需要它,以及它是如何工作的?
c# ×6
.net-core ×3
asynchronous ×3
async-await ×2
task ×2
asp.net-core ×1
daemon ×1
http ×1
linux ×1
rabbitmq ×1
raytracing ×1
web-config ×1
wpf ×1
xunit ×1