在FileSystemWatcher中为每个事件分配单独的线程

时间:2018-01-16 01:44:14

标签: c# multithreading filesystemwatcher

我正在开发一个包含FileSystemWatcher的Windows服务。文件创建后,我必须对Web API进行一些网络调用。

请查看下面的代码行。

watcher.Created += new FileSystemEventHandler((object source, FileSystemEventArgs e) => { ProcessCreateEvent(e); });

事件处理程序

private async void ProcessCreateEvent(FileSystemEventArgs e){
      // make some network calls and do certain tasks
      // network calls doing asynchronously
}

我深入了解了FileSystemWatcher,我理解在ProcessCreateEvent方法中处理网络调用并不是一个好习惯。那么如何为每个文件更改分配单独的线程?

2 个答案:

答案 0 :(得分:0)

我认为可以简单地通过使.widthind{ width: 30px; height: 30px; background-color: black; color: white; } form { margin: 0; padding: 0; display: -webkit-inline-box; }像这样异步来完成:

<link href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<table class="table table-boardered" id="examples">
  <thead class="thead-dark">
    <tr>
 <th>Id</th>

<th>Customer Name</th>

<th>Description</th>
<th>Order Number</th>

<th>PO Number</th>
<th>Quantity</th>
<th>Due Date</th>
<th>Billing Address</th>
<th>Shipping Address</th>
<th>Installing Address</th>
<th>Design</th>
<th>Production</th>
<th>Shipping</th>
<th>Install</th>
<th>Production Manager</th>
<th>Project manager</th>
<th>Sales Representatives</th>
<th>Shipping Method</th>


<th>Created At</th>

<th>Status</th>    
<td style="display:none;"></td>
</tr>
  </thead>

  <tbody>

     

 <tr id="deletetr21"> 

	<td class="notIdClass">2PslfYy</td>

	<td class="editableDataClass" data-edit="21" data-table="customer_name">dsndfbbd ejaz</td>
	
	<td class="editableDataClass" data-edit="21" data-table="description"></td>
	<td class="editableDataClass" data-edit="21" data-table="order_number">2061</td>
	
	<td class="editableDataClass" data-edit="21" data-table="po_number"></td>
	<td class="editableDataClass" data-edit="21" data-table="quantity"></td>
	<td class="editableDataClass" data-edit="21" data-table="due_date"></td>
	<td class="editableDataClass" data-edit="21" data-table="billing_address"></td>
	<td class="editableDataClass" data-edit="21" data-table="shipping_address"></td>
	<td class="editableDataClass" data-edit="21" data-table="installing_address"></td>
	<td class="editableDataClass" data-edit="21" data-table="design"></td>
	<td class="editableDataClass" data-edit="21" data-table="production"></td>
	<td class="editableDataClass" data-edit="21" data-table="shipping"></td>
	<td class="editableDataClass" data-edit="21" data-table="install"></td>
	<td class="editableDataClass" data-edit="21" data-table="production_manager"></td>
	<td class="editableDataClass" data-edit="21" data-table="project_manager"></td>
	<td class="editableDataClass" data-edit="21" data-table="sales_representative"></td>
	<td class="editableDataClass" data-edit="21" data-table="shipping_method"></td>
	





	<td data-table="workflow" style="color:#0277bd">16-01-2018</td>



	


    <td class="statusNotClass">
      
       <select data-edit="21" data-table="status" class="defineWorkflow">  
            <option value="">-- Select --</option>
            <option value="progress">Progress</option>
            <option value="pending">Pending</option>
            <option value="completed">Completed</option>  
        </select>

    </td>

<td>
 </td></tr></tbody><thead id="alsoDeleteThead21" class="thead-dark excludeAction" style="background-color: !important;">
    <tr><th style="width: 100% !important">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edit Option</th>

      <th colspan="50 ">


      
    <a> <form action="http://localhost:8000/send_customer_status" method="POST">
         <input type="hidden" name="_token" value="DbhEfiBiILxfL7GeRivtIsVw2U1VAyxcWAqw3WaN">
        <input type="hidden" name="job_id" value="21">
        <input type="hidden" name="customer_id" value="9">
        <button class="btn btn-danger send-status " title="Status Sent On - ">Send Status </button>
     </form></a>
     <a href="#" class="btn btn-danger  send-quotation">Send Quotation</a>
     <a href="#" class="btn btn-danger  send-invoice">Send in Voice</a>
     <a href="#" class="btn btn-danger  delete-customer" data-delete="21">Delete</a></th>
   

  
  </tr></thead>
 

	    

      

 <tbody><tr id="deletetr22"> 

	<td class="notIdClass">AnsAhKR</td>

	<td class="editableDataClass" data-edit="22" data-table="customer_name">Raj Laxmi</td>
	
	<td class="editableDataClass" data-edit="22" data-table="description">45x56 led board</td>
	<td class="editableDataClass" data-edit="22" data-table="order_number">2164</td>
	
	<td class="editableDataClass" data-edit="22" data-table="po_number">45231</td>
	<td class="editableDataClass" data-edit="22" data-table="quantity"></td>
	<td class="editableDataClass" data-edit="22" data-table="due_date">2018/01/15 16:23</td>
	<td class="editableDataClass" data-edit="22" data-table="billing_address"></td>
	<td class="editableDataClass" data-edit="22" data-table="shipping_address"></td>
	<td class="editableDataClass" data-edit="22" data-table="installing_address"></td>
	<td class="editableDataClass" data-edit="22" data-table="design">45x56 led board, 18x90 flex, 500 brouchers</td>
	<td class="editableDataClass" data-edit="22" data-table="production">back and front board 2 side</td>
	<td class="editableDataClass" data-edit="22" data-table="shipping">Call before installing</td>
	<td class="editableDataClass" data-edit="22" data-table="install">he needs to get installed on 17th - Jan-2018</td>
	<td class="editableDataClass" data-edit="22" data-table="production_manager">Saif</td>
	<td class="editableDataClass" data-edit="22" data-table="project_manager">Hemanth</td>
	<td class="editableDataClass" data-edit="22" data-table="sales_representative"></td>
	<td class="editableDataClass" data-edit="22" data-table="shipping_method">mini truck</td>
	





	<td data-table="workflow" style="color:#0277bd">16-01-2018</td>



	


    <td class="statusNotClass">
      
       <select data-edit="22" data-table="status" class="defineWorkflow">  
            <option value="">-- Select --</option>
            <option value="progress">Progress</option>
            <option value="pending">Pending</option>
            <option value="completed">Completed</option>  
        </select>

    </td>

<td>
 </td></tr></tbody><thead id="alsoDeleteThead22" class="thead-dark excludeAction" style="background-color: !important;">
    <tr><th style="width: 100% !important">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edit Option</th>

      <th colspan="50 ">


      
    <a> <form action="http://localhost:8000/send_customer_status" method="POST">
         <input type="hidden" name="_token" value="DbhEfiBiILxfL7GeRivtIsVw2U1VAyxcWAqw3WaN">
        <input type="hidden" name="job_id" value="22">
        <input type="hidden" name="customer_id" value="12">
        <button class="btn btn-danger send-status statusAlreadySent" title="Status Sent On - 2018-01-16 17:28:00">Send Status </button>
     </form></a>
     <a href="#" class="btn btn-danger  send-quotation">Send Quotation</a>
     <a href="#" class="btn btn-danger  send-invoice">Send in Voice</a>
     <a href="#" class="btn btn-danger  delete-customer" data-delete="22">Delete</a></th>
   

  
  </tr></thead>
 

	    

      
  

  <tfoot>
          <tr>
             <th>Id</th>
            
            <th>Customer Name</th>
            
            <th>Description</th>
            <th>Order Number</th>
            
            <th>PO Number</th>
            <th>Quantity</th>
            <th>Due Date</th>
            <th>Billing Address</th>
            <th>Shipping Address</th>
            <th>Installing Address</th>
            <th>Design</th>
            <th>Production</th>
            <th>Shipping</th>
            <th>Install</th>
            <th>Production Manager</th>
            <th>Project manager</th>
            <th>Sales Representatives</th>
            <th>Shipping Method</th>
            
            
            <th>Created At</th>
            
            <th>Status</th>    
            <td style="display:none;"></td>
          </tr>
  </tfoot>
</table>

答案 1 :(得分:0)

事件已经支持<?php $links = array(); while( has_sub_field( 'available_locations' ) ) { $links[] = '<a href="'.the_sub_field('location_url').'">'.the_sub_field('locations').'</a>'; } echo implode( ', ', $links ); ,因此您可以执行以下操作:

async

除非您在事件处理程序中执行的非异步内容非常昂贵,否则您无需启动另一个watcher.Created += this.ProcessCreateEvent; private async void ProcessCreateEvent(object sender, FileSystemEventArgs e) { var result = await asyncApi.GetStuffAsync(); }