我在WCF中看到他们有[OperationContract(IsOneWay = true)]属性.但是WCF似乎有点缓慢而且很重要,只是为了创建一个非阻塞功能.理想情况下会出现类似静态无效的阻塞MethodFoo(){},但我认为不存在.
在C#中创建非阻塞方法调用的最快方法是什么?
例如
class Foo
{
static void Main()
{
FireAway(); //No callback, just go away
Console.WriteLine("Happens immediately");
}
static void FireAway()
{
System.Threading.Thread.Sleep(5000);
Console.WriteLine("5 seconds later");
}
}
Run Code Online (Sandbox Code Playgroud)
注意:阅读此内容的每个人都应该考虑他们是否真的想要完成这个方法.(参见#2最佳答案)如果方法必须完成,那么在某些地方,比如ASP.NET应用程序,你需要做一些事情来阻止并保持线程活着.否则,这可能会导致"忘记但永远不会实际执行",在这种情况下,当然,根本不编写任何代码会更简单.(很好地描述了它在ASP.NET中的工作原理)
有没有办法Http在我自己的Web API中激活对外部Web API的调用而无需等待结果?
我的场景是我真的不在乎调用是否成功,我不需要该查询的结果.
我目前在我的一个Web API方法中做了类似的事情:
var client = new HttpClient() { BaseAddress = someOtherApiAddress };
client.PostAsync("DoSomething", null);
Run Code Online (Sandbox Code Playgroud)
我不能把这段代码放在一个using语句中,因为在这种情况下调用不会通过.我也不想调用.Result()该任务,因为我不想等待查询完成.
我试图理解做这样的事情的含义.我全身都知道这真的很危险,但我不确定为什么.例如,当我的初始查询结束时会发生什么.将IIS处置线程和客户端对象,这会导致查询的另一端出现问题吗?