There might be many threads starting. Try using local variables with display statements below. See IEEE Std 1800-2012 § 16.10 Local variables
propert my_property;
static int prop_cnt=0; // shared
local int prop_id; // Note: some require the "local", other need it omitted
@(posedge clk) disable iff(reset)
($rose(halt) ##0 ((rx_prio) > (expec_prio)),
prop_id=prop_cnt++,
$display("Spawn prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time) )
##[0:$] ($rose(rdy),
$display("Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time) )
|-> ##[1:100] (my_prio[rx_prio]==1'b1,
$display("Pass prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time) );
endproperty : my_property
If you see Spawn-Spawn-Trigger, or Spawn-Trigger-Trigger, our anything outside of expected (i.e. Spawn-Triger-Pass) then there are unexpected threads.
If this is the case, then look into IEEE Std 1800-2012 § 16.9.8 First_match operation
first_match(
$rose(halt) ##0 ((rx_prio) > (expec_prio)) ##[0:$] $rose(rdy),
$display("Spawn-Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time)
) |-> // ...
OR § 16.9.10 Sequence contained within another sequence
(
( $rose(halt) ##0 ((rx_prio) > (expec_prio)) ) within $rose(rdy)[->1],
$display("Spawn-Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time)
) |-> // ...
You might want to create a sequence
for the trigger.