假设您有下一个代码:
var house = new {Color = "White", Area = 150};
var typeHouse = house.GetType();
var argumentTypes = typeHouse.GetGenericArguments();
Run Code Online (Sandbox Code Playgroud)
该argumentTypes阵列有两种类型:字符串和INT ......这是确定:)
但是,如果我有使用Roslyn编译器的下一个代码:
var tree = SyntaxTree.ParseText(@"
namespace TestRoslyn {
public class MyClass {
public void GetHouse(){
var house = new {Color = 'W', Area = 150};
}
}
}");
byte[] assembly;
var compiler = Compilation.Create("Test", new CompilationOptions(outputKind: OutputKind.DynamicallyLinkedLibrary,
usings: new[] { "System" }))
.AddSyntaxTrees(tree)
.AddReferences(new MetadataFileReference(typeof(object).Assembly.Location));
using (var stream = new MemoryStream())
{
var result = compiler.Emit(stream);
if …Run Code Online (Sandbox Code Playgroud) 我正在执行许多异步 Web 请求并使用 Async.Parallel。就像是:
xs
|> Seq.map (fun u -> downloadAsync u.Url)
|> Async.Parallel
|> Async.Catch
Run Code Online (Sandbox Code Playgroud)
某些请求可能会抛出异常,我想记录它们并继续处理其余的 url。我找到了Async.Catch函数,但这会在抛出第一个异常时停止计算。我知道我可以try...with在异步表达式中使用一个表达式来计算整个列表,但是,我认为,这意味着将日志函数传递给我的downloadAsync函数来改变他的类型。有没有其他方法可以捕获异常,记录它们并继续处理其余的 url?