首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让ASP.NET Web API的Action方法在希望的Culture下执行

不过这些解决方案都不够完美,原因很简单:ASP.NET Web API的整个框架均采用基于Task的并行编程模式,所以每个可扩展组件均可以在不同的线程中执行,这样会导致我们没有办法100%控制目标方法真正执行的线程的...3种方案:自定义HttpActionInvoker 五、第4种方案:为HttpController创建一个基类 一、两个辅助的扩展方法 我们针对HttpRequestMessage定义了如下两个扩展方法...Action方法的执行最终实现在HttpActionDescriptor的ExecuteAsync方法中,我们可以通过自定义的HttpActionDescriptor的方式在目标Action方法执行前后对当前线程的...在重写的ExecuteAsync方法中,我们调用基类的同名方法执行目标Action方法,并在这前后分别调用当前HttpRequestMessage的两个扩展方法设置和恢复当前线程的UI Culture。...为此我定义了如下一个ExtendedApiControllerActionInvoker,在重写的InvokeActionAsync方法中,我们调用基类的同名方法执行目标Action方法,并在这前后分别调用当前

1.3K90

ng6中,在HTTP拦截器里,异步请求数据,之后再返回拦截器继续执行用户请求的方法研究

一、问题背景:       上面绕口的标题不知道大家看不看的懂。通常我们用拦截器就是两个目的, 1、在请求头里统一添加请求头。 2、对响应结果预先处理。      ...那么如何监测用户是在“连续活动”的时候,且当前token超时后,系统能自动获取新token,并且在之后请求中使用该新token呢?...简化一下表述:如何在拦截里中,判断token失效了能自动请求新token,并且把新token赋予当前的拦截请求中去。...其实这个事情要解决2个问题: 1、时间的判定逻辑:   判断当前时间与 用户的上次活动时间和获取token的时间, 决定是让用户重登录,还是我的程序自动更新一下token,让用户继续访问系统。...其次是在重新获取token后,让原业务请求重新发生,并用要subscribe()一下。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JAVASE中的多线程小结,多生产多消费案例.

    (); t.start(); //如果这样做,start方法调用的是Thread类中的run方法,而这个线程中的run方法没有做什么事情 //更重要的是这个run方法中并没有定义我们需要让线程执行的代码...调用run方法在开启的线程中执行 栈区域内存的分配: 多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间进行方法的压栈和弹栈。...当执行线程的任务结束了,线程自动在栈内存中释放了,当所有的执行线程都结束了,进程就结束了。...,如果标记为false,则代表没有资源,消费者来告诉生产者生产资源,然后再去等待 问题1:被唤醒的线程没有继续判断标记,所以会造成一个生产者生产多个一个消费者消费多个, 我们只需要吧...,但是wait方法必须定义在同步中 4.如果两个方法都定在同步中,那么线程执行到sleep,不会释放锁,而wait会释放锁 线程如何停止?

    72611

    博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 前言 以前做算法题,都是实现一个方法,需要的参数会在方法参数中直接给出,而且需要的返回值直接在方法中 return 就好了。...但是,这次阿里笔试,让博主遭遇百万点暴击,需要的参数居然要到输入流中读取,而且返回结果居然直接输出到控制台上!...由于没有见过这种套路,博主的心态极差,且十分惊奇地发现,当使用 Java 输入类 nextLine 方法读取输入流中的字符串时,总会莫名其妙地少读一部分! 然后,就没有然后了。。。...程序在通过 nextInt 方法读取数字之后,会留下一个 enter 键,这个 enter 键会被第一个执行的 nextLine 函数接收,这导致我们能够读取的数据永远少一行(nextLine 少执行一次...); } } } 总结 最后我们再来总结一下 nextLine 与 next 两个方法的区别: next 不会接收回车符,tab 或者空格键,在接收有效数据之前会忽略这些符号,若已经读取了有效数据

    33110

    sleep() wait() yield() join()傻傻风不清楚?

    功能 sleep() sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态。...可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。...join() join()方法会使当前线程等待调用join()方法的线程结束后才能继续执行....比较 sleep() vs wait() 来自不同的类 这两个方法来自不同的类,sleep是Thread类的方法,而wait是Object类的方法 //Object.java public class...然后再来说notify和notifyAll的区别: 如果线程调用了对象的wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。

    85110

    dotnet 多线程禁止同时调用相同的方法 禁止方法重入调用 双检锁的设计

    而让方法在多线程调用中,相同的时间会被多个线程同时执行某段代码逻辑的技术称为方法重入调用技术,而禁止方法被同时调用也就是禁止方法重入调用。...可以使用的方法有很多,下面让我告诉大家如何做到禁止方法重入调用 锁定方法 在 C# 里面可以使用关键词 lock 加上一个对象作为锁定,在进入 lock 的逻辑,只能有一个线程获取锁,因此在 lock...因此两个线程在相互等待 这样的逻辑代码是在 F1 方法定义的时候无法了解的,这就是为什么不建议使用 MethodImpl 的原因。...使用 Interlocked 的方法可以获取极高的性能 如果你想要将如上代码用于对象的初始化,那么上面两个写法其实有本质的不同,不同之处在于用 双检锁 的写法可以让线程阻塞,在首次对象初始化过程中,其他线程能使用到执行线程的执行结果...类实现这个功能,详细请看 dotnet 使用 AsyncQueue 创建高性能内存生产者消费者队列 如果我要求执行方法的时候,如果有多个线程调用,那么在方法执行过程中,多次进来的线程都不做实际的执行,

    98410

    ForkJoin框架阅读笔记

    它提供在任务 中执行fork()和join()操作的机制。通常情况下,我们不需要直接继承ForkJoinTask类,只需要继 承它的子类,Fork/Join框架提供了以下两个子类。...使用Fork/Join框架首先要考虑到的是如何分割任务,如果希望每个子任务最多执行两个 数的相加,那么我们设置分割的阈值是2,由于是4个数字相加,所以Fork/Join框架会把这个任 务fork成两个子任务...,子任务一负责计算1+2,子任务二负责计算3+4,然后再join两个子任务 的结果。...如果不足够小,就必须分割成两个子任务,每个子任务在调用fork方法时,又会进入 compute方法,看看当前子任务是否需要继续分割成子任务,如果不需要继续分割,则执行当 前子任务并返回结果。...然后再调用ForkJoinPool的 signalWork()方法唤醒或创建一个工作线程来执行任务。代码如下。

    29910

    并发编程-22J.U.C组件拓展之ForkJoin框架

    它提供在任务中执行fork()和join()操作的机制。通常情况下,我们不需要直接继承ForkJoinTask类,只需要继承它的子类。...---- 示例 需求:计算1+2+3+4的结果 使用Fork/Join框架首先要考虑到的是如何分割任务,如果希望每个子任务最多执行两个数的相加,那么我们设置分割的阈值是2....由于是4个数字相加,所以Fork/Join框架会把这个任务fork成两个子任务,子任务一负责计算1+2,子任务二负责计算3+4,然后再join两个子任务的结果。...如果不足够小,就必须分割成两个子任务,每个子任务在调用fork方法时,又会进入compute方法,看看当前子任务是否需要继续分割成子任务,如果不需要继续分割,则执行当前子任务并返回结果。...使用join方法会等待子任务执行完并得到其结果。

    32230

    C# dotnet 使用 TaskCompletionSource 实现暂停功能

    在业务设置继续的时候,就从 await 继续执行 那么这个方法是如何实现的?...在 dotnet 里面提供了 TaskCompletionSource 类,这个类可以在创建完成调用 await 关键字等待,直到调用 SetResult 等方法设置完成 简单的使用例子如下,有两个方法在两个不同的线程...方法让 CurrentTask 完成 这里有一个细节就是在 TrySetResult 方法设置任务完成的时候,将会在当前线程继续执行等待 TaskCompletionSource 的代码。...如上面例子的 A 和 B 两个方法,在 B 方法调用 SetResult 的时候,将会在 B 方法所在线程执行 A 方法的输出 A 完成 然后再继续 如果此时还需要实现中断的功能,很简单,可以通过抛 Exception...如果使用 WPF 做效果会比较好,可以新建两个按钮,分别是继续和暂停,修改下面代码可以看到在点击暂停的时候,执行等待任务的代码就会暂停直到点击继续按钮 下面是通过输出 F1 和 F2 和 F3 方法的调用

    2.1K30

    Java里如何实现线程间通信?

    如何让两个线程依次执行? 那如何让 两个线程按照指定方式有序交叉运行呢?...如何让两个线程依次执行?...A B C 全执行完毕后才执行,而且 A B C 是同步运行的 最开始我们介绍了 thread.join(),可以让一个线程等另一个线程运行完毕后再继续执行,那我们可以在 D 线程里依次 join A...实际的开发中,我们经常要创建子线程来做一些耗时任务,然后把任务执行结果回传给主线程使用,这种情况在 Java 里要如何实现呢?...那么下一个问题就是,如何把子线程的结果回传回来呢?在 Java 里,有一个类是配合 Callable 使用的:FutureTask,不过注意,它获取结果的 get 方法会阻塞主线程。

    69110

    面试官:Java 是如何实现线程间通信的?

    如何让两个线程依次执行? 那如何让 两个线程按照指定方式有序交叉运行呢?...如何让两个线程依次执行?...A B C 全执行完毕后才执行,而且 A B C 是同步运行的 最开始我们介绍了 thread.join(),可以让一个线程等另一个线程运行完毕后再继续执行,那我们可以在 D 线程里依次 join A...实际的开发中,我们经常要创建子线程来做一些耗时任务,然后把任务执行结果回传给主线程使用,这种情况在 Java 里要如何实现呢?...那么下一个问题就是,如何把子线程的结果回传回来呢?在 Java 里,有一个类是配合 Callable 使用的:FutureTask,不过注意,它获取结果的 get 方法会阻塞主线程。

    26420

    Java 是如何实现线程间通信的?

    如何让两个线程依次执行? 那如何让两个线程按照指定方式有序交叉运行呢?...如何让两个线程依次执行?...A B C 全执行完毕后才执行,而且 A B C 是同步运行的 最开始我们介绍了 thread.join(),可以让一个线程等另一个线程运行完毕后再继续执行,那我们可以在 D 线程里依次 join A...实际的开发中,我们经常要创建子线程来做一些耗时任务,然后把任务执行结果回传给主线程使用,这种情况在 Java 里要如何实现呢?...那么下一个问题就是,如何把子线程的结果回传回来呢?在 Java 里,有一个类是配合 Callable 使用的:FutureTask,不过注意,它获取结果的 get 方法会阻塞主线程。

    25050

    Java 是如何实现线程间通信的?

    如何让两个线程依次执行? 那如何让 两个线程按照指定方式有序交叉运行呢?...如何让两个线程依次执行?...A B C 全执行完毕后才执行,而且 A B C 是同步运行的 最开始我们介绍了 thread.join(),可以让一个线程等另一个线程运行完毕后再继续执行,那我们可以在 D 线程里依次 join A...实际的开发中,我们经常要创建子线程来做一些耗时任务,然后把任务执行结果回传给主线程使用,这种情况在 Java 里要如何实现呢?...那么下一个问题就是,如何把子线程的结果回传回来呢?在 Java 里,有一个类是配合 Callable 使用的:FutureTask,不过注意,它获取结果的 get 方法会阻塞主线程。

    20220

    【大厂求职必看】太强了!Tomcat线程模型全网最清晰讲解!

    当用户线程发起I/O操作后(Selector发出的select调用就是一个I/O操作),网络数据读取操作会经历两个步骤: 用户线程等待内核将数据从网卡拷贝到内核空间 内核将数据从内核空间拷贝到用户空间...Acceptor Acceptor实现了Runnable接口,因此可以跑在单独线程里,在这个死循环里调用accept接收新连接。...这是个典型的“生产者-消费者”模式,Acceptor与Poller线程之间通过Queue通信。 Poller 本质是一个Selector,也跑在单独线程里。...因为Tomcat支持同步非阻塞I/O、异步I/O模型,在Java API中,对应Channel类不同,比如有AsynchronousSocketChannel和SocketChannel,为了对Http11Processor...所谓阻塞或非阻塞是指应用程序在发起I/O操作时,是立即返回还是等待 同步和异步,是指应用程序在与内核通信时,数据从内核空间到应用空间的拷贝,是由内核主动发起还是由应用程序来触发。

    44220

    Java并发编程之CountDownLatch,CyclicBarrier实现一组线程相互等待、唤醒

    count为计数值 public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行...count值还没变为0的话就会继续执行 public void countDown() { }; //将count值减1 工作原理就是让“其他线程”在合适的地方进行await等待,直到所有线程达到了某一个目标...可以看到这个工具类的目的,主要是为了限制一组线程在达到某个条件后,强制进行等待,直到最后一个线程也执行完await之前的逻辑后,再所有线程一起走await后面的。...要说起这两个类的区别,我觉得更多的初衷是CountDownLatch目的是让一个线程等待其他N个线程达到某个条件后,自己再去做某个事(通过CyclicBarrier的第二个构造方法,在新线程里做事可以达到同样的效果...而CyclicBarrier的目的是让N多线程互相等待直到所有的都达到某个状态,然后这N个线程再继续执行各自后续(通过CountDownLatch在某些场合也能完成类似的效果)。

    52140

    【大厂求职必看】太强了!Tomcat线程模型全网最清晰讲解!

    当用户线程发起I/O操作后(Selector发出的select调用就是一个I/O操作),网络数据读取操作会经历两个步骤: 用户线程等待内核将数据从网卡拷贝到内核空间 内核将数据从内核空间拷贝到用户空间...Acceptor Acceptor实现了Runnable接口,因此可以跑在单独线程里,在这个死循环里调用accept接收新连接。...这是个典型的“生产者-消费者”模式,Acceptor与Poller线程之间通过Queue通信。 Poller 本质是一个Selector,也跑在单独线程里。...因为Tomcat支持同步非阻塞I/O、异步I/O模型,在Java API中,对应Channel类不同,比如有AsynchronousSocketChannel和SocketChannel,为了对Http11Processor...所谓阻塞或非阻塞是指应用程序在发起I/O操作时,是立即返回还是等待 同步和异步,是指应用程序在与内核通信时,数据从内核空间到应用空间的拷贝,是由内核主动发起还是由应用程序来触发。

    29620

    Java 里如何实现线程间通信?

    如何让两个线程依次执行? 那如何让 两个线程按照指定方式有序交叉运行呢?...如何让两个线程依次执行?...C D,其中 D 要等到 A B C 全执行完毕后才执行,而且 A B C 是同步运行的 最开始我们介绍了 thread.join(),可以让一个线程等另一个线程运行完毕后再继续执行,那我们可以在...实际的开发中,我们经常要创建子线程来做一些耗时任务,然后把任务执行结果回传给主线程使用,这种情况在 Java 里要如何实现呢?...那么下一个问题就是,如何把子线程的结果回传回来呢?在 Java 里,有一个类是配合 Callable 使用的:FutureTask,不过注意,它获取结果的 get 方法会阻塞主线程。

    50820

    Java线程面试题 Top 50

    不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。 3) 如何在Java中实现线程? 在语言层面有两种方式。...如果wait()方法定义在Thread类中,线程正在等待的是哪个锁就不明显了。...Java多线程中的死锁 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。...在多线程中有多种方法让线程按特定顺序执行,你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。...Java中的Semaphore是一种新的同步类,它是一个计数信号。从概念上讲,从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。

    1.1K20

    实现数据库连接池-后传

    使用这些类和函数,可以在 C++ 程序中创建和管理多个线程 下面是一个简单的示例,演示如何在 C++ 中创建和使用多个线程: #include #include ...在 main() 函数中,我们创建了两个线程 t1 和 t2,它们分别执行 print(3) 和 print(5)。然后我们调用 join() 方法来等待两个线程结束。...然后,调用 go 函数通知所有等待的线程继续执行。 最后,使用一个循环等待所有线程执行完毕。 在这个例子中,所有线程都在等待一个条件变量。...这时,可以使用 std::thread 类的 join 函数来等待线程执行完毕。 当然,也可以不使用 join 函数,而是让主线程一直等待,直到其他线程执行完毕。...但是这样做会浪费主线程的计算资源,降低程序的执行效率。使用 join 函数可以让主线程在等待时释放处理器资源,让其他线程更快地执行。 此外,join 函数还可以确保线程在析构前已经执行完毕。

    10110
    领券