小编Fac*_*Vir的帖子

如何使用.NET 4中的任务并行库链接异步操作?

我正在尝试以编程方式将C#4中的异步操作链接起来,例如写入给定的Stream对象.我最初是"手动"执行此操作,将回调挂钩从一个操作到下一个操作,但我想我会尝试使用.NET 4任务并行库来省去重新发明并发轮的麻烦.

首先,我将异步调用包装在Tasks中,如下所示:

public static Task CreateWriteTask(Stream stream, byte[] data)
{
    return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, data, 0, data.Length, null);
}
Run Code Online (Sandbox Code Playgroud)

Continuations使链接同步操作变得非常容易(如果您原谅不幸的方法名称):

public static Task ChainFlush(Stream stream, Task precedingTask)
{
    return precedingTask.ContinueWith(x => stream.Flush());
}
Run Code Online (Sandbox Code Playgroud)

但是没有任何版本的Task.ContinueWith方法可以像接受同样的方式接受异步操作TaskFactory.FromAsync.

所以,假设我坚持使用TPL,我正在寻找这种方法的正确实现:

public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
    //?
}
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library

17
推荐指数
1
解决办法
5175
查看次数

为什么在发出通过值类型泛型引用彼此的类时会出现此异常?

这段代码片段是我的类生成代码的简化摘录,它创建了两个类,它们作为泛型类型中的参数相互引用:

namespace Sandbox
{
    using System;
    using System.Reflection;
    using System.Reflection.Emit;

    internal class Program
    {
        private static void Main(string[] args)
        {
            var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("Test"), AssemblyBuilderAccess.Run);
            var module = assembly.DefineDynamicModule("Test");

            var typeOne = module.DefineType("TypeOne", TypeAttributes.Public);
            var typeTwo = module.DefineType("TypeTwo", TypeAttributes.Public);

            typeOne.DefineField("Two", typeof(TestGeneric<>).MakeGenericType(typeTwo), FieldAttributes.Public);
            typeTwo.DefineField("One", typeof(TestGeneric<>).MakeGenericType(typeOne), FieldAttributes.Public);

            typeOne.CreateType();
            typeTwo.CreateType();

            Console.WriteLine("Done");
            Console.ReadLine();
        }
    }

    public struct TestGeneric<T>
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个应该产生相当于以下的MSIL:

public class TypeOne
{
    public Program.TestGeneric<TypeTwo> Two;
}

public class TypeTwo
{
    public Program.TestGeneric<TypeOne> One;
}
Run Code Online (Sandbox Code Playgroud)

但是反而抛出了这个异常typeOne.CreateType():

System.TypeLoadException was …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection.emit

16
推荐指数
1
解决办法
1639
查看次数

如何在远程计算机上的Invoke-Command中抛出的异常中保留ScriptStackTrace?

我正在编写一个Powershell脚本,它执行我的构建/部署过程中的一个步骤,它需要在远程计算机上运行一些操作.该脚本相对复杂,因此如果在远程活动期间发生错误,我需要详细的堆栈跟踪,指出错误发生在脚本中的位置(超出已经生成的日志记录).

问题在于,当从远程机器中继终止异常时,Invoke-Command丢失堆栈跟踪信息.如果在本地计算机上调用脚本块:

Invoke-Command -ScriptBlock {
    throw "Test Error";
}
Run Code Online (Sandbox Code Playgroud)

返回所需的异常详细信息:

Test Error
At C:\ScriptTest\Test2.ps1:4 char:2
+     throw "Test Error";
+     ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Test Error:String) [], RuntimeException
    + FullyQualifiedErrorId : Test Error
Run Code Online (Sandbox Code Playgroud)

但如果远程运行:

Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
    throw "Test Error";
}
Run Code Online (Sandbox Code Playgroud)

异常堆栈跟踪指向整个Invoke-Command块:

Test Error
At C:\ScriptTest\Test2.ps1:3 char:1
+ Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Test Error:String) [], RuntimeException
    + FullyQualifiedErrorId : Test Error
Run Code Online (Sandbox Code Playgroud)

我可以手动将异常传回本地机器:

$exception = Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
    try …
Run Code Online (Sandbox Code Playgroud)

powershell invoke-command

8
推荐指数
1
解决办法
1013
查看次数

是否可以使用Vulkan渲染到UWP应用程序?

我正在为Vulkan开发C#绑定,其中包括一组示例项目,这些项目呈现简单的形状以演示API调用.这些项目作为WinForms应用程序运行,将Forms的HWND传递给Vulkan以附加Surface对象以创建交换链.

我有一个请求提供一个作为UWP应用程序运行的示例项目,但是当我运行项目(将所有代码移植到UWP可移植库之后)并从Vulkan API返回成功代码时,没有任何内容出现在UWP应用程序窗口中.我正在使用此问题中描述的方法从UWP CoreWindow获取Vulkan Surface的HWND,示例代码上传到https://github.com/FacticiusVir/SharpVk/blob/UWP/SharpVk/SharpVk. HelloTriangle.Uwp/MainPage.xaml.cs中 -不幸的是,我不能挑出特定的部分代码来报价,因为我不知道在哪里该项目的问题所在.

因此,总结一下 - 是否可以将Vulkan用作UWP应用程序的渲染器,如果是这样,我该怎么办呢?

c# vulkan uwp

5
推荐指数
0
解决办法
2181
查看次数