1. A method of allocating tasks among resource providers which may be intermittently reachable over a network, comprising: determining potential resource providers for performing different tasks; receiving a task request having required resource for performing a task from a requester; first identifying at least one available resource provider having said required resource for performing the task; receiving information required to accomplish the requested task; second identifying at least one available resource provider having said required resource for performing the task; distributing the task and the information required to accomplish the task to one of said at least one available resource provider; receiving a status response from one of said at least one available resource provider indicating willingness or unwillingness to perform the distributed task; and if the status response indicates willingness to perform, then allocating completion of the distributed task thereto.